我创建了这个小测试程序。它有2个按钮和2个标签。我想知道如何使用2个按钮。因此,当我按下按钮-1然后我更改text-1的文本,当我按下按钮-2然后我更改text-2的文本。我只是想知道如何使用多个按钮。
我的代码:
JLabel text1, text2;
JButton button1, button2;
public Game(String title) {
super(title);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().setLayout(new FlowLayout());
addComponents();
setSize(250, 250);
setResizable(false);
}
public void addComponents() {
text1 = new JLabel();
getContentPane().add(text1, text2);
text2 = new JLabel();
getContentPane().add(text2);
button1 = new JButton("Button");
getContentPane().add(button1);
button1.addActionListener(this);
button2 = new JButton("Button 2");
getContentPane().add(button2);
button2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
}
我是编程新手,所以如果有人可以为代码编写一些注释,我也希望如此。这样我就可以了解多个按钮的代码是如何工作的。
答案 0 :(得分:2)
在actionPerformed
方法中,您可以获得操作的来源
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button1){
//Do Something
}else if(e.getSource() == button2){
//Do Something Else
}
答案 1 :(得分:1)
有多种方法可以向按钮添加监听器,这里只有几个:
如果您不必在每个按钮中执行太多操作,则可以在每个按钮中添加内部侦听器
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// DO STUFF
}
});
如果您有超过2个按钮(我猜您的应用会更大),您可以使用actionPerformed(ActionEvent e)
获取操作来源
@Override
public void actionPerformed(ActionEvent e) {
JButton source = (JButton) e.getSource();
if(source.equals(button1)){
// DO STUFF
}
}
actionCommand
澄清为了澄清这种方法,我建议您使用JButton.setActionCommand(stringCommand)
之后使用switch
:
声明按钮:
button1.setActionCommand("command1");
button2.setActionCommand("command2");
在ActionListener::actionPerformed()
public void actionPerformed(ActionEvent e) {
String command = ((JButton) e.getSource()).getActionCommand();
switch (command) {
case "command1":
// DO STUFF FOR BUTTON 1
break;
case "command2":
// DO STUFF FOR BUTTON 2
break;
}
}
答案 2 :(得分:0)
在添加组件之前,不应使用setVisible(true)
。
有几种方法可以处理ActionEvent中的更多元素:
e.getSource()
返回发生事件的对象。因此,如果按下button1,e.getSource()
将与button1相同(因此e.getSource()==button1
将为真)button1.addActionListener(new Button1ActionEvent());
]你必须创建这个类,让它实现ActionListener并像你在主类中一样添加actionPerformed方法。此外,您可以在addActionListener-method [button1.addActionListener(new ActionListener() { // actionPerformed-method here });
] 答案 3 :(得分:0)
使用Java 8,添加ActionListeners更加简洁:
button.addActionListener(ae -> System.out.println("foo"));
使用多个陈述:
button.addActionListener(ae -> {
System.out.println("foo");
System.out.println("bar");
});