所以我的作业要求创建一个顺序文件。我的教授给了我这个执行操作的简单代码:
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 https://docs.oracle.com/javase/8/docs/api/java/util/EventObject.html#getSource--获取事件的源组件。假设您可以引用其他组件,您可以简单地使用它来比较它们,例如
if (e.getSource( ) == btnDone) {
-
ActionEvent#getActionCommand https://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionEvent.html#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
,这让人回想起前几天内部/匿名类 https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html,其中创建一个单一的更简单ActionListener
class.
现在,通常更可取的是使用内部/匿名类来生成小型、隔离和上下文监听器,这可能看起来像......
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();
}
});
这是一个独立的、上下文相关的单元作品,专为单一用途的作品而设计。一般来说,它更容易阅读和维护,因为上下文定义良好,并且您不会试图绕过一堆不相关的工作。
如果您需要更可重用的东西,那么您应该看看如何使用动作 http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)