【问题标题】:Creating dynamic button arrays创建动态按钮数组
【发布时间】:2015-07-23 05:54:26
【问题描述】:

我有一个循环来创建这样的按钮。这些按钮充当房间中的床(房间是 InternalFrame)。 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");
}

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

【问题讨论】:

  • 考虑您的数据与其他数据的关系。例如,每张床都包含在一个房间内,我假设它包含在其他一些结构中。这样,您可以构造您的 Action,使其至少知道需要将床添加到的房间

标签: java swing jbutton unique


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 2013-09-05
      • 1970-01-01
      • 2016-01-16
      • 2020-10-30
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多