创建动态按钮数组

时间:2015-07-22 21:27:43

标签: java swing jbutton unique

我有一个循环来创建这样的按钮。这些按钮充当房间的床(房间是内部框架)。 addButtons是一个JButton数组。

for (int i = 0; i < addButtons.length; i++) {
       addButtons[i] = new JButton("     Add Bed     "); // make text big
       addButtons[i].addActionListener(new AddBedListener());
       addButtons[i].setActionCommand("" + i);
       gbc.fill = GridBagConstraints.BOTH;
       room1Panel.add(addButtons1[i]);
    }   

我想添加一个允许我创建更多房间的功能,所以我创建了一个功能

public void createRoom(int nBeds, String bName){
    RoomFrame roomFrame = new RoomFrame();
    JPanel panel = new JPanel();

    for (int i = 0; i < nBeds; i++) {
           addButtons[i] = new JButton("     Add Bed     "); // make text big
           addButtons[i].addActionListener(new AddBedListener());
           addButtons[i].setActionCommand("" + i);
            gbc.fill = GridBagConstraints.BOTH;
           room4Panel.add(addButtons4[i]);
        }   
    BackButton backButton = new BackButton("Back");
}

问题是,我不知道如何动态创建一个按钮数组以供我的代码使用。代码需要知道一个房间中的按钮数组与另一个房间中的按钮数组不同,因此名称必须是唯一的。如何使用动态创建房间的功能,但允许我将每个按钮作为唯一实体引用?

2 个答案:

答案 0 :(得分:3)

  

代码需要知道一个房间中的按钮数组与另一个房间中的按钮数组不同,因此名称必须是唯一的。

名称并不像许多新编码员认为的那样重要,当然不是变量名称。更重要的是引用以及如何访问引用。

最佳解决方案是使用MVC或模型 - 视图 - 控制程序结构来帮助组织代码。但是如果那太复杂了,那么房间的视图表示,这里的RoomFrame会保存这个列表,并且会有一个addBed(Bed bed)方法。最重要的是,Room或RoomFrame类应该包含其自己的Bed对象的ArrayList,如:

List<Bed> bedList = new ArrayList<>(),

所以房间本身会跟踪自己的床位,并准备好参考它所拥有的所有床位。底线:让您的对象智能让他们知道自己的状态,并根据该状态改变他们的行为。

答案 1 :(得分:1)

将唯一ID传递到AddBedListener构造函数中,该构造函数可用于唯一地标识按钮,或者仅将唯一行为强制添加到AddBedListener的每个实例中。