Java:创建多个(重复)按钮,这些按钮对自己执行相同的操作

时间:2015-07-09 21:37:26

标签: java swing user-interface jbutton actionlistener

背景信息:我想制作一个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.
    }
}

1 个答案:

答案 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];