[英]How to use actionPerformed( ActionEvent e ) with more that one button?
所以我的作业说要创建一个顺序文件。 我的教授给了我这个执行动作的简单代码:
public void actionPerformed( ActionEvent e ) {
//FOR STATE AND COUNTRY
String country = (String)comboBox_1.getSelectedItem();
Object o = states.get( country );
if (o == null)
{
comboBox_2.setModel( new DefaultComboBoxModel() );
}
else
{
comboBox_2.setModel( new DefaultComboBoxModel( (String[])o ) );
}
//****DONE WITH THE STATE AND COUNTRY COMBOBOXEZ*****
addRecord( ) ;
if ( e.getSource( ) == btnDone ) {
try {
output.close( );
}
catch ( IOException io ) {
System.err.println( "File not closed properly\n" +
e.toString( ) );
System.exit(1);
}
System.exit(0);
}
}
}
它基本上说如果您单击“完成”按钮以外的任何内容,它将创建一个顺序文件。 我应该怎么做才能选择每个动作? 我用国家和州做了一个jcombobox,当我选择一个国家时,它会创建文件,然后将我带到该国家的州。希望您能帮助我。
我不确定我是否完全理解您的问题,但是...
您可以使用:
ActionEvent#getSource
以获取事件的源组件。 假设您可以引用其他组件,则可以简单地使用它进行比较,例如, if (e.getSource( ) == btnDone) {
ActionEvent#getActionCommand
,它返回与组件关联的actionCommand
(通过支持组件上的setActionCommand
设置),它为您提供确定事件类型的方法,而无需引用源组件,当您可能需要可以以多种不同方式触发的“常见”动作。 现在,通常来说,当调用actionPerformed
时,您想确定是什么触发了该动作并采取适当的动作,因此对于您的代码,您可能会做更多的事情……
if (e.getSource() == comboBox_1) {
String country = (String) comboBox_1.getSelectedItem();
Object o = states.get(country);
if (o == null) {
comboBox_2.setModel(new DefaultComboBoxModel());
} else {
comboBox_2.setModel(new DefaultComboBoxModel((String[]) o));
}
//****DONE WITH THE STATE AND COUNTRY COMBOBOXEZ*****
addRecord();
} else if (e.getSource() == btnDone) {
try {
output.close();
} catch (IOException io) {
System.err.println("File not closed properly\n"
+ e.toString());
System.exit(1);
}
System.exit(0);
}
这是设计ActionListener
一种相当“古老”的方法,这种方法可以追溯到内部/匿名类之前的日子,在内部/匿名类之前创建单个ActionListener
类更为简单。
如今,通常更可取的是使用内部/匿名类生成小的,隔离的上下文侦听器,这些侦听器可能看起来像...
comboBox_1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String country = (String) comboBox_1.getSelectedItem();
Object o = states.get(country);
if (o == null) {
comboBox_2.setModel(new DefaultComboBoxModel());
} else {
comboBox_2.setModel(new DefaultComboBoxModel((String[]) o));
}
//****DONE WITH THE STATE AND COUNTRY COMBOBOXEZ*****
addRecord();
}
});
这是一个独立的,上下文相关的单元作品,旨在用于单一用途的作品。 通常,由于上下文定义良好,因此阅读和维护起来更容易,而且您也不会试图涉足一堆无关的工作。
如果您需要更可重用的东西,那么应该看看如何使用动作
我找到了解决方案,它就在我眼前,这是给将来的用户的。
public void actionPerformed(ActionEvent e){
//FOR STATE AND COUNTRY
String country = (String)comboBox_1.getSelectedItem();
Object o = states.get(country);
if (o == null){
comboBox_2.setModel(new DefaultComboBoxModel());
}
else{
comboBox_2.setModel(new DefaultComboBoxModel((String[])o));
}
//****DONE WITH THE STATE AND COUNTRY COMBOBOXES*****
// this was the solution for my problem
if(e.getSource==buttonToAddRecords){
addRecord( ) ;
}
if(e.getSource( ) == btnDone){
try{
output.close( );
}
catch(IOException io){
System.err.println("File not closed properly\n" +
e.toString( ));
System.exit(1);
}
System.exit(0);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.