动态生成的jbutton



我正试图为制作一个模拟建筑物中电梯的GUI(实际上是为了测试线程化/c-scan),但当为电梯控制面板生成按钮和为每个楼层生成按钮时,我有点卡住了。我正在考虑为每层楼生成一对新按钮,并为每部电梯生成一个新的控制面板。此外,拥有可变数量的楼层也很困难。不管怎样,我的问题是,做这件事的最佳方式是什么?也许没有必要为每件事都生成新的按钮,只需使用一组并更改每个楼层/电梯的操作?我这么问是因为我对GUI不是很熟悉。感谢的帮助

如果所有的电梯和控制面板都是一样的,你可以使用奇异的方法在电梯或控制面板中通过。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
            }
        });
    }
}

在楼层数量可变的情况下,您可以创建一个按钮阵列:

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,应该有一个问题给出的可能限制。

最新更新