如何将actionListener添加到每个Button

时间:2016-05-07 12:19:10

标签: java swing user-interface actionlistener

有些人可能会对这个问题感到困惑,但我会尽力以最好的方式提出问题。我正在使用jdbc和gui。基本上我想显示(按钮格式)从我的SQL数据库收到的特定数据。我可以正确地获取数据并将其作为其名称放入我的按钮数组中。换句话说,我有一个按钮的ArrayList,从我的数据库收到不同的名称/文本。因此,我真的需要制作按钮的arraylist,因为数据是动态填充的。我的问题是,我对如何为每个按钮创建一个actionListener感到困惑。每次单击每个按钮时,都必须显示与其名称关联的值。我不知道我应该如何将至少按钮的名称传递给我的actionListener方法(或动作事件处理程序)。如果你发现它令人困惑,这里是我的按钮的代码。

todayTaskButton.add(new JButton(taskForToday.get(i)));
todayTaskButton.get(i).setPreferredSize(new Dimension(300,75));
todayTaskButton.get(i).setBackground(Color.GRAY);
todayTaskButton.get(i).setFont(new Font("Century Gothic",Font.PLAIN,30));
todayTaskButton.get(i).setForeground(Color.WHITE);
todayTaskButton.get(i).setFocusable(false);

非常感谢

2 个答案:

答案 0 :(得分:2)

您不需要将按钮名称传递给ActionListener。它会被自动检测到。您只需要在课程中实现方法actionPerformed(ActionEvent)

然后将监听器添加到按钮:

todayTaskButton.get(i).addActionListener(this);

actionPerformed方法中,您可以执行以下操作:

JButton b = (JButton) e.getSource();
String text = b.getText();

答案 1 :(得分:1)

老实说,你可以通过很多方式实现这个目标,问题是为你挑选合适的方法......

你可以......

每次创建

时,为每个按钮创建一个匿名类
todayTaskButton.get(i).addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        //...
    }
});

虽然这可以工作,但它可能会使代码变得非常混乱,您还需要一种方法以某种方式将操作映射回按钮,这可以使用actionCommand属性或使用{ {1}}属性,如果您不介意迭代可用按钮列表

你可以......

创建一个目标构建类,为每个按钮实现source,这可能需要对数据进行某种引用

ActionListener

这是一个更专注,因为你并不真正关心按钮,因为你有"今天"监听器的值,所以所有正常重复的代码都可以被隔离到一个类中,你只需传入"变量"元件

你可以......

充分利用todayTaskButton.get(i).addActionListener(new TodayActionListener(taskForToday.get(i))); API,为每个按钮制作单独的自包含操作......

Action

然后你可以简单地使用

public class TaskAction extends AbstractAction {

    public TodayAction(String task) {
        putValue(NAME, task);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // Specific action for task
    }

}

虽然这与前一个选项类似,但todayTaskButton.add(new JButton(new TaskAction(taskForToday.get(i)))); 是一个独立的工作单元,并且具有许多Action可用于自行配置的属性。 JButton也可以重新用于Action和密钥绑定,使其非常灵活

详细了解How to Use Actions了解更多详情