所以我的任务是创建一个顺序文件。我的教授给了我这个简单的代码来执行action ::
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,当我选择一个国家时,它会创建该文件,然后它会让我进入该国的州。希望你能帮助我。谢谢。
答案 0 :(得分:2)
我不确定我完全理解你的问题,但是......
您可以使用:
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
的一种相当“古老”的方式,它可以追溯到inner/anonymous classes之前的日子,在这里创建单个ActionListener
类更简单。 / p>
现在通常更倾向于使用内部/匿名类来生成小型,隔离和上下文的侦听器,这可能看起来像......
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();
}
});
这是一个独立的上下文单元工作,专为单一工作而设计。一般来说,它更容易阅读和维护,因为上下文定义明确,而且你不是试图围绕一堆无关的工作。
如果您需要更易于使用的内容,那么您应该查看How to Use Actions
答案 1 :(得分:0)
我找到了解决方案,它就在我面前,这是为了未来的用户。
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);
}
}