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