有些人可能会对这个问题感到困惑,但我会尽力以最好的方式提出问题。我正在使用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);
非常感谢
答案 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了解更多详情