背景信息:我想制作一个9x9网格按钮作为空床。所有按钮都说"加床"当点击时打开一个窗口来写入有关占用者的数据。保存后,按钮将变为占用床位图像。
问题:是否可以创建一个事件监听器,为每个按钮执行相同的操作,但是将其应用于按下的按钮?我是java新手,但我知道好的代码应该可以在几行而不是100 +
中完成CODE:
//button1 (inside the gui function)
addBed1 = new JButton("Add bed"); //button 1 of 9
addBed1.addActionListener(new room1Listener());
class room1Listener implements ActionListener{
public void actionPerformed(ActionEvent event){
addBed1.setText("Adding bed..);
addBedGui(); //Generic window for adding bed info.
}
}
答案 0 :(得分:4)
是否可以创建一个事件监听器,为每个按钮执行相同的操作,但是将其应用于按下的按钮?我是java新手,但我知道好的代码应该可以在几行而不是100 +
中完成
绝对。实际上,您可以创建一个ActionListener对象,并将此相同的侦听器添加到for循环中的每个按钮。 ActionListener将能够通过ActionEvent#getActionCommand()
方法获得对其按下的按钮的引用,或者您可以通过// RoomListener, not roomListener
class RoomListener implements ActionListener{
public void actionPerformed(ActionEvent event){
AbstractButton btn = (AbstractButton) event.getSource();
btn.setText("Adding bed..);
addBedGui(); //Generic window for adding bed info.
}
}
方法获取JButton的actionCommand String(通常是其文本)。
如,
RoomListener roomListener = new RoomListener();
JButton[] addButtons = new JButton[ADD_BUTTON_COUNT];
for (int i = 0; i < addButtons.length; i++) {
addButtons[i] = new JButton(" Add Bed "); // make text big
addButtons[i].addActionListener(roomListener);
addBedPanel.add(addButtons[i]);
}
和
[self.myLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth];