Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将actionPerformed(ActionEvent e)与多个按钮一起使用?_Java_Swing_Actionlistener_Jcombobox - Fatal编程技术网

Java 如何将actionPerformed(ActionEvent e)与多个按钮一起使用?

Java 如何将actionPerformed(ActionEvent e)与多个按钮一起使用?,java,swing,actionlistener,jcombobox,Java,Swing,Actionlistener,Jcombobox,所以我的任务是创建一个顺序文件。我的教授给了我一个简单的操作代码: public void actionPerformed( ActionEvent e ) { //FOR STATE AND COUNTRY String country = (String)comboBox_1.getSelectedItem(); Object o = states.get( country ); if (o == null) {

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

    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,当我选择一个国家时,它会创建文件,然后将我带到该国的州。希望你能帮助我,谢谢。

我不确定我是否完全理解你的问题,但是

您可以使用:

  • 获取事件的源组件。假设您可以引用其他组件,您可以简单地使用它来比较它们,例如
    if(e.getSource()==btnDone){
  • 它返回与组件关联的
    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();
    }
});
这是一个独立的、上下文相关的单元作品,专为工作的单一用途而设计。一般来说,它更易于阅读和维护,因为上下文定义良好,并且你不会试图在一堆无关的工作中翻跟头


如果您需要更可重用的东西,那么您应该看看

我不确定我是否完全理解您的问题,但是

您可以使用:

  • 获取事件的源组件。假设您可以引用其他组件,您只需使用它来比较它们,例如
    if(e.getSource()==btnDone){
  • 它返回与组件关联的
    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); 
  }
} 

我找到了解决方案,它就在我眼前,这是给未来用户的

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

你试过将处理程序传递给多个按钮吗?是什么让你认为你不能这样做?我不知道怎么做,或者至少我想我不知道..我尝试了很多不同的按钮和if语句,我很烂!!你可能想告诉你的教授,在swing UI线程上执行i/O是个坏主意。公平地说,这本来是f或者awt组件,不知道是否同样适用。你是否尝试过将处理程序传递给多个按钮?是什么让你认为你不能这样做?我不知道怎么做,或者至少我认为我不知道..我尝试了很多不同的按钮,如果语句,我很烂!!你可能想告诉你的教授在swing上做i/OUI线程是个坏主意。公平地说,这最初是针对awt组件的,不知道是否也适用。谢谢,伙计,我希望我在开始作业之前就知道这一点,这样会少一些混乱,而且我可能不会被卡住。尽管发生了同样的事情,但我还是搞不清楚这一点。谢谢,伙计,我希望在开始作业之前就知道这一点这样就不会那么混乱了,而且我可能不会被卡住。尽管发生了同样的事情,我还是搞不懂这件事。