如何使用actionPerformed(ActionEvent e)多一个按钮?

所以我的任务是创建一个顺序文件。 我的教授给了我这个简单的代码来执行操作:

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); } }