动态生成的jbuttons

时间:2014-10-14 20:27:35

标签: java swing user-interface

我试图制作一个用于模拟建筑物中电梯的GUI(真的是测试线程/ c扫描),但是当为电梯控制面板生成按钮和每个楼层的按钮时,我和#39;有点卡住了。我考虑为每个楼层生成一对新按钮,并为每个电梯生成一个新的控制面板。还存在具有可变数量的楼层的困难。无论如何,我的问题是这个最好的方法是什么?也许没有必要为所有东西生成新的按钮,只需使用一套并更改每个楼层/电梯的动作?我问,因为我不熟悉GUI。谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

在这种情况下,楼层数是可变的,你可以创建一个按钮数组:

JButton[] buttons = new JButton[MAX_NUMBER_OF_FLOORS];

然后,当您确定运行时楼层的确切数量时,您可以去实例化并添加按钮:

for(int i=0; i<numberOfFloors; i++) {
    buttons[i] = new JButton();
    controlPanel.add(buttons[i]);
}

这样的事情应该有效。

为MAX_NUMBER_OF_FLOORS分配一个像100这样的大数字,问题可能存在限制。

答案 1 :(得分:0)

如果所有电梯和控制面板相同,您可以使用单一方法并通过电梯或控制面板。 CustomPanel扩展了JPanel并且有一个方法foo。

public void createElevatorButtons(final CustomPanel panel) {
    ArrayList<JButton> buttons = new ArrayList<>(); //arraylist of buttons we can keep track of
    JPanel buttonPanel = new JPanel(); //the visible component
    for(int i = 1; i <= numberOfFloors;i++) {
        JButton button = new JButton(String.valueOf(i)); //creates buttons for floors 1 to max
        buttons.add(button);
        buttonPanel.add(button);
    }
    panel.add(buttonPanel);

    //add the action listeners
    for(JButton button : buttons) {
        button.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JButton floor = (JButton) e.getSource();
                int floorNumber = Integer.parseInt(floor.getText());
                panel.foo(floorNumber); //we tell the elevator/panel/whatever to do something, you will have to extend JPanel to do foo
            }
        });
    }
}