Adding a ArrayList into a JComboBox

有些话、适合烂在心里 提交于 2020-07-31 06:00:30

问题


I am running into an issue with adding a ArrayList into a JComboBox. Can someone give some advice on how to proceed? I can't seem to get the ArrayList to go into the ComboBox. What are the different ways to work with populating JCombobox's with arrayLists?

HotelSystem.Java

package hotelManage;

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

import javax.swing.*;

public class HotelSystem extends JFrame implements ActionListener {
    /**
     * 
     */
    private static final long serialVersionUID = 1840835913045151061L;

    private JFrame mainFrame;
    private JPanel mainPanel;
    private JPanel btnPanel;
    private JButton btnRoom;
    private JButton btnCustomer;
    private JButton btnOrder;
    private JButton btnSearch;
    private CardLayout cLayout;
    private JLabel lblUpdate;
    //



    //
    OrderSystem order = new OrderSystem();
    JPanel orderPanel = order.getOrderPanel();
    //
    RoomSystem room = new RoomSystem();
    JPanel roomPanel = room.getRoomPanel();
    ArrayList<String> AvailableRooms = room.getAvailableRooms();
    //
    private JButton btnBackfromRoom = room.getBtnBack();
    private JButton btnBackfromOrder = order.getBtnBack();


    //other
    private JButton btnUserInputEdit = room.getBtnEdit();


    public HotelSystem(){
        showGUI();
        registerListeners();


    }

    private void showGUI(){
        //create JFrame(mainFrame)  
        mainFrame = new JFrame("Hotel Management System");
        mainFrame.setSize(500,300);
        mainFrame.setLayout(new GridLayout(2,0));


        //create buttons
        btnRoom = new JButton("Room Editor");
        btnCustomer = new JButton("Customer Editor");
        btnOrder = new JButton("Order");
        btnSearch = new JButton("Search");

        //create Labels
        lblUpdate = new JLabel("Instructions/details will go here.");

        //create main panel 
        mainPanel = new JPanel();
        cLayout = new CardLayout();
        mainPanel.setLayout(cLayout);

        //create panel that holds the buttons
        btnPanel = new JPanel();

        //add buttons to panel
        btnPanel.add(btnRoom);
        btnPanel.add(btnCustomer);
        btnPanel.add(btnOrder);
        btnPanel.add(btnSearch);
        btnPanel.add(lblUpdate);


        //Button & Room Panel
        mainPanel.add(btnPanel, "Buttons");
        mainPanel.add(roomPanel, "Rooms");
        mainPanel.add(orderPanel, "Orders");


        //other stuff
        mainFrame.add(mainPanel);
        mainFrame.setVisible(true);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }


    public void registerListeners(){
        //register all buttons to self
        btnRoom.addActionListener(this);
        btnCustomer.addActionListener(this);
        btnOrder.addActionListener(this);
        btnSearch.addActionListener(this);
        btnBackfromRoom.addActionListener(this);
        btnBackfromOrder.addActionListener(this);
        btnUserInputEdit.addActionListener(this);
    } // end registerListeners

    public void actionPerformed(ActionEvent e){
        System.out.println(e.getActionCommand());
        //check all button presses and send
        //control to appropriate methods
       if (e.getSource() == btnRoom){
           cLayout.show(mainPanel, "Rooms");
        } else if (e.getSource() == btnCustomer){
        } else if (e.getSource() == btnOrder){
            cLayout.show(mainPanel, "Orders");
        } else if (e.getSource() == btnSearch){
        } else if (e.getSource() == btnBackfromRoom){
            cLayout.show(mainPanel, "Buttons");
        } else if (e.getSource() == btnBackfromOrder){
            cLayout.show(mainPanel, "Buttons");
        } else if (e.getSource() == btnUserInputEdit){
            //retrieve contents from ComboBox.
            JComboBox<String> test = room.getRoomType();
            String selectedItem = (String) test.getSelectedItem();

            //adds user input into array
            AvailableRooms.add(selectedItem);



            //testing functionality of.. something.
            for(String item: AvailableRooms){
                System.out.println("retrieved element: " + item);
                lblUpdate.setText("A new room has been created! It has been stored under the " + item + " category.");
                }
            cLayout.show(mainPanel, "Buttons");

        } else {
            //lblOutput.setText("something went wrong");
        } // end if


    } // end actionPerformed




    public static void main(String[] args) {
        new HotelSystem();

    }


}

RoomSystem.Java

package hotelManage;

import java.awt.*;
import java.util.ArrayList;

import javax.swing.*;

public class RoomSystem {


    private JButton btnEdit;
    private JButton btnBack;
    private JPanel roomPanel;
    private JComboBox<String> roomType;

    GridBagLayout gridBag;

    //RoomPent, RoomLarge, RoomSmall
    String[] roomArray = { "Penthouse", "Large Room", "Small Room" };
    ArrayList<String> AvailableRooms = new ArrayList<String>();


    public RoomSystem(){
        setBtnEdit(new JButton("Create"));
        setBtnBack(new JButton("Back to Main Menu"));

        Label  lblRoom= new Label("Room Type: ");   

        setRoomType(new JComboBox<>(roomArray));



        roomPanel = new JPanel();
        roomPanel.setLayout(new GridBagLayout());
        GridBagConstraints gridConst = new GridBagConstraints();


        //Panel Dimensions

        gridConst.gridx = 0;
        gridConst.gridy = 0;
        roomPanel.add(lblRoom, gridConst);
        gridConst.gridx = 1;
        gridConst.gridy = 0;
        roomPanel.add(roomType, gridConst);

        gridConst.gridx = 0;
        gridConst.gridy = 2;
        roomPanel.add(getBtnEdit(), gridConst);
        gridConst.gridx = 1;
        gridConst.gridy = 2;
        roomPanel.add(getBtnBack(), gridConst);


    }


    public JPanel getRoomPanel() {
        return roomPanel;
    }


    public void setRoomPanel(JPanel roomPanel) {
        this.roomPanel = roomPanel;
    }


    public JButton getBtnBack() {
        return btnBack;
    }


    public void setBtnBack(JButton btnBack) {
        this.btnBack = btnBack;
    }


    public JButton getBtnEdit() {
        return btnEdit;
    }


    public void setBtnEdit(JButton btnEdit) {
        this.btnEdit = btnEdit;
    }


    public ArrayList<String> getAvailableRooms(){
        return AvailableRooms;

    }

    public void setAvailableRooms(ArrayList<String> AvailableRooms){
        this.AvailableRooms = AvailableRooms;
    }


    public JComboBox<String> getRoomType() {
        return roomType;
    }


    public void setRoomType(JComboBox<String> roomType) {
        this.roomType = roomType;
    }



}

OrderSystem.Java

package hotelManage;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.ArrayList;

import javax.swing.*;

public class OrderSystem {

    private JButton btnOrder;
    private JButton btnBack;
    private JPanel orderPanel;
    private JTextField firstName;
    private JTextField lastName;
    //private JComboBox<String> roomList;
    String[] arraynamehere = { "Temp", "Temp1", "Temp2" };
    RoomSystem room = new RoomSystem();
    ArrayList<String> aRooms = room.getAvailableRooms();
    JComboBox<String> roomList;
    //DefaultComboBoxModel<String> Modes = new DefaultComboBoxModel<String>(); 

    public OrderSystem(){
        btnOrder = new JButton("Process Order");
        setBtnBack(new JButton("Back to Main Menu"));

        JLabel lblfName = new JLabel("First Name: ");
        JLabel lbllName = new JLabel("Last Name: ");
        JLabel lblfEmptyRooms = new JLabel("Available Rooms: ");

        firstName = new JTextField("", 20);
        lastName = new JTextField("", 20);


        //ComboBox that should hold the elements of aRooms (Array)
        roomList = new JComboBox<String>();


        orderPanel = new JPanel();
        orderPanel.setLayout(new GridBagLayout());
        GridBagConstraints gridConst = new GridBagConstraints();

        //Panel Dimensions

        gridConst.gridx = 0;
        gridConst.gridy = 0;
        orderPanel.add(lblfName, gridConst);
        gridConst.gridx = 1;
        gridConst.gridy = 0;
        orderPanel.add(firstName, gridConst);

        gridConst.gridx = 0;
        gridConst.gridy = 1;
        orderPanel.add(lbllName, gridConst);
        gridConst.gridx = 1;
        gridConst.gridy = 1;
        orderPanel.add(lastName, gridConst);

        gridConst.gridx = 0;
        gridConst.gridy = 2;
        orderPanel.add(lblfEmptyRooms, gridConst);
        gridConst.gridx = 1;
        gridConst.gridy = 2;
        orderPanel.add(roomList, gridConst);

        gridConst.gridx = 0;
        gridConst.gridy = 3;
        orderPanel.add(btnOrder, gridConst);
        gridConst.gridx = 1;
        gridConst.gridy = 3;
        orderPanel.add(getBtnBack(), gridConst);


    }




    public JPanel getOrderPanel() {
        return orderPanel;
    }


    public void setOrderPanel(JPanel orderPanel) {
        this.orderPanel = orderPanel;
    }

    public JButton getBtnBack() {
        return btnBack;
    }


    public void setBtnBack(JButton btnBack) {
        this.btnBack = btnBack;
    }

    public static void main(String[] args) {


    }

}

回答1:


you need to call setModel() on comobox obect.

comboBox.setModel(new DefaultComboBoxModel<>(aRooms.toArray(new String[aRooms.size()])));

see doc here




回答2:


A JComboBox should be used with a ComboBoxModel.

roomList = new JComboBox<>(new DefaultComboBoxModel<String>(aRooms.toArray(new String[aRooms.size()));

This code will create and populate the model for the combobox.



来源:https://stackoverflow.com/questions/23299050/adding-a-arraylist-into-a-jcombobox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!