为方法创建的按钮添加Action侦听器

时间:2013-12-14 10:53:11

标签: button actionlistener

好的,如果我有以下代码:

protected void makebutton(String name){

         JButton button = new JButton(name);

         mypanel.add(button);
     }

然后:

makebutton("Button1");
makebutton("Button2");
makebutton("Button3");

如何向其添加ActionListener。我将哪个名称用于ActionListener,尝试了很多组合但没有成功。

2 个答案:

答案 0 :(得分:0)

你可以做的是让方法返回一个Button。多数民众赞成你可以在你的程序中使用其他位置的按钮变量。在您的情况下发生的是按钮被封装。因此您无法从代码中的任何其他位置进行访问。像这样的东西

private JButton makeButton(String name){
    JButton button = new JButton(name);

    button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            // code action to perform
        }
    });
    return button;
}

您可以在声明按钮时使用该方法

JButton aButton = makeButton();
panel.add(aButton);

更合理的方法是创建没有方法的按钮。

JButtton button = new JButton("Button");
panel.add(button);

button.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        // code action to perform
    }
});

我真的不认为需要一种方法。

另一种选择是创建自定义侦听器类

public class GUI {
    JButton button1;
    JButton button2;

    public GUI(){
        button1 = new JButton();
        button2 = new JButton();
        button1.addActionListner(new ButtonListener());
        button2.addActionListner(new ButtonListener());
    }

    private class ButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            if (e.getSource() == button1){
                // do something
            } else if (e.getSource() == button2){
                // something
            }
        }
    } 
}

答案 1 :(得分:0)

protected void makebutton(String name){
    final String n = name;
    JButton button = new JButton(name);

    mypanel.add(button);
    button.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            if(n=="Button1"){
                button1ActionListener();
            }else if(n=="Button2"){
                button2ActionListener();
            }
        }
    });
 }

您必须为每个按钮创建更多方法。 我认为peeskillet的第二个代码是好的。