2016-02-19 77 views
0

我想在一个小程序中创建,当一个复选框被选中时,为特定按钮执行的动作被改变为执行的另一个动作,让我们假设执行的按钮动作给出1 + 2的结果,我希望当我检查复选框,使按钮操作执行1-3例如。复选框来改变按钮动作侦听器

这里是我的代码

import java.awt.*; 

public class frame extends JFrame { // Declaring the frame class 

public frame() { // crating a constructor 
    getContentPane().setLayout(new GridLayout(5,2)); // Creating 5 lines and 2 rows 
    // first label for adding the first number 
    JLabel label = new JLabel("First Number"); 
    getContentPane().add(label); 
    label.setHorizontalAlignment(SwingConstants.CENTER); 
    // first text field 
    final JTextField text = new JTextField(8); 
    getContentPane().add(text); 
    text.setHorizontalAlignment(SwingConstants.CENTER); 
    // second label for adding second number 
    JLabel label1 = new JLabel("Second Number"); 
    getContentPane().add(label1); 
    label1.setHorizontalAlignment(SwingConstants.CENTER); 
    // second text field 
    final JTextField text1 = new JTextField(); 
    getContentPane().add(text1); 
    text1.setHorizontalAlignment(SwingConstants.CENTER); 
    // third label for the result 
    JLabel label2 = new JLabel("Result is"); 
    getContentPane().add(label2); 
    label2.setHorizontalAlignment(SwingConstants.CENTER); 
    // third text field to show the result 
    final JTextField text2 = new JTextField(); 
    getContentPane().add(text2); 
    text2.setHorizontalAlignment(SwingConstants.CENTER); 
    text2.setEditable(false); 
    // Calculation button 
    JButton btn = new JButton("Calculate"); 
    btn.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      String number1, number2, result, ans; 
      try { 
       /*number1 = Double.parseDouble(text.getText()); 
       number2 = Double.parseDouble(text1.getText()); 
       result = number1*number2; 
       text2.setText(Double.toString(result));*/ 
       if (text.getText().isEmpty() || text1.getText().isEmpty()) { 
        throw new Exception(); 
       } 

       number1 = text.getText(); 
       number2 = text1.getText(); 
       result = number1.concat(number2); 
       text2.toString(); 
       text2.setText(result); 

      } catch (Exception e1) { 
       JOptionPane.showMessageDialog(null, "Please add a letter"); 
      } 
     } 
    });  
    getContentPane().add(btn); 
    // Clear button 
    JButton clear = new JButton("Clear"); 
    getContentPane().add(clear); 

    final JCheckBox chckbxNewCheckBox = new JCheckBox("New check box"); 
    getContentPane().add(chckbxNewCheckBox); 

    final JCheckBox chckbxNewCheckBox_1 = new JCheckBox("New check box"); 
    getContentPane().add(chckbxNewCheckBox_1); 

    chckbxNewCheckBox.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      if (chckbxNewCheckBox.isSelected()) { 
       chckbxNewCheckBox_1.setSelected(false); 
      } 
     } 
    }); 

    chckbxNewCheckBox_1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      if (chckbxNewCheckBox_1.isSelected()) { 
       chckbxNewCheckBox.setSelected(false); 
      } 
     } 
    }); 

    clear.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      try { 
       text.setText(""); 
       text1.setText(""); 
       text2.setText(""); 
      } catch(Exception e1) { 
      } 
     } 
    }); 

    //setVisible(true); 
    //setSize(400,200); 
    //setResizable(false); 
    //setLocationRelativeTo(null); 
    //setTitle("Calculator"); 
} 

public static void main (String args[]) { // Creating the main method 
    frame frame = new frame(); // creating an object of the ShowGridLayout class, object is frame. 
    frame.setVisible(true); 
    frame.setSize(400, 200); 
    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
    frame.setTitle("Calculator"); 
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);; 
} 

}

回答

0

它可以以多种方式来解决。

  1. 您可以有一个整型字段(成员变量或静态),并在选择不同的复选框时更新它的值。通过查看静态整数的值,为每个要执行的动作定义不同的方法,并在按钮动作侦听器中调用它们。

OR

  • 保持加入的按钮的ActionListener的引用,并上的复选框的选择从按钮移除现有的动作侦听器,并添加新的和更新引用新的监听者。
  • 我希望它有帮助。

    编辑1:如果你只想一次选择一个,最好使用单选按钮。

    编辑2: 这里是你如何使用单选按钮和删除和添加监听器。

    public class frame extends JFrame { // Declaring the frame class 
         final JTextField text; 
         final JTextField text1; 
         final JTextField text2; 
    
         public frame() { // crating a constructor 
          getContentPane().setLayout(new GridLayout(5, 2)); // Creating 5 lines and 2 rows 
          // first label for adding the first number 
          JLabel label = new JLabel("First Number"); 
          getContentPane().add(label); 
          label.setHorizontalAlignment(SwingConstants.CENTER); 
          // first text field 
          text = new JTextField(8); 
          getContentPane().add(text); 
          text.setHorizontalAlignment(SwingConstants.CENTER); 
          // second label for adding second number 
          JLabel label1 = new JLabel("Second Number"); 
          getContentPane().add(label1); 
          label1.setHorizontalAlignment(SwingConstants.CENTER); 
          // second text field 
          text1 = new JTextField(); 
          getContentPane().add(text1); 
          text1.setHorizontalAlignment(SwingConstants.CENTER); 
          // third label for the result 
          JLabel label2 = new JLabel("Result is"); 
          getContentPane().add(label2); 
          label2.setHorizontalAlignment(SwingConstants.CENTER); 
          // third text field to show the result 
          text2 = new JTextField(); 
          getContentPane().add(text2); 
          text2.setHorizontalAlignment(SwingConstants.CENTER); 
          text2.setEditable(false); 
    
          final AddValuesActionListener actionListener = new AddValuesActionListener(); 
          // Calculation button 
          final JButton btn = new JButton("Calculate"); 
          btn.addActionListener(actionListener); 
    
          final JRadioButton addRadioButton = new JRadioButton("Add", true); 
          addRadioButton.addActionListener(new ActionListener() { 
           @Override 
           public void actionPerformed(ActionEvent e) { 
            btn.removeActionListener(actionListener); 
            btn.addActionListener(new AddValuesActionListener()); 
           } 
          }); 
    
          final JRadioButton subtractRadioButton = new JRadioButton("Subtract", true); 
          subtractRadioButton.addActionListener(new ActionListener() { 
           @Override 
           public void actionPerformed(ActionEvent e) { 
            btn.removeActionListener(actionListener); 
            btn.addActionListener(new SubtractValuesActionListener()); 
           } 
          }); 
    
    
          getContentPane().add(btn); 
          // Clear button 
          JButton clear = new JButton("Clear"); 
          getContentPane().add(clear); 
    
          ButtonGroup radioButtons = new ButtonGroup(); 
          radioButtons.add(addRadioButton); 
          radioButtons.add(subtractRadioButton); 
          getContentPane().add(addRadioButton); 
          getContentPane().add(subtractRadioButton); 
         } 
    
         public static void main(String args[]) { // Creating the main method 
          frame frame = new frame(); // creating an object of the ShowGridLayout class, object is frame. 
          frame.setVisible(true); 
          frame.setSize(400, 200); 
          frame.setResizable(false); 
          frame.setLocationRelativeTo(null); 
          frame.setTitle("Calculator"); 
          frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
          ; 
         } 
    
         private class AddValuesActionListener implements ActionListener { 
          public void actionPerformed(ActionEvent e) { 
           text2.setText(text.getText() + "+" + text1.getText()); //Create add values method 
          } 
         } 
    
         private class SubtractValuesActionListener implements ActionListener { 
          public void actionPerformed(ActionEvent e) { 
           text2.setText(text.getText() + "-" + text1.getText()); //Create add values method 
          } 
         } 
        } 
    

    这里是你如何可以简单地通过选中单选按钮选择做由@JeriesHG

    的建议
    public class frame extends JFrame { // Declaring the frame class 
         final JTextField text; 
         final JTextField text1; 
         final JTextField text2; 
    
         public frame() { // crating a constructor 
          getContentPane().setLayout(new GridLayout(5, 2)); // Creating 5 lines and 2 rows 
          // first label for adding the first number 
          JLabel label = new JLabel("First Number"); 
          getContentPane().add(label); 
          label.setHorizontalAlignment(SwingConstants.CENTER); 
          // first text field 
          text = new JTextField(8); 
          getContentPane().add(text); 
          text.setHorizontalAlignment(SwingConstants.CENTER); 
          // second label for adding second number 
          JLabel label1 = new JLabel("Second Number"); 
          getContentPane().add(label1); 
          label1.setHorizontalAlignment(SwingConstants.CENTER); 
          // second text field 
          text1 = new JTextField(); 
          getContentPane().add(text1); 
          text1.setHorizontalAlignment(SwingConstants.CENTER); 
          // third label for the result 
          JLabel label2 = new JLabel("Result is"); 
          getContentPane().add(label2); 
          label2.setHorizontalAlignment(SwingConstants.CENTER); 
          // third text field to show the result 
          text2 = new JTextField(); 
          getContentPane().add(text2); 
          text2.setHorizontalAlignment(SwingConstants.CENTER); 
          text2.setEditable(false); 
    
          final JRadioButton addRadioButton = new JRadioButton("Add", true); 
          final JRadioButton subtractRadioButton = new JRadioButton("Subtract", true); 
    
          // Calculation button 
          final JButton btn = new JButton("Calculate"); 
          btn.addActionListener(new ActionListener() { 
           @Override 
           public void actionPerformed(ActionEvent e) { 
            if (addRadioButton.isSelected()) { 
             text2.setText(text.getText() + "+" + text1.getText()); //Create add values method 
            }  else if (subtractRadioButton.isSelected()) { 
             text2.setText(text.getText() + "-" + text1.getText()); //Create subtract values method 
            } 
           } 
          }); 
    
          getContentPane().add(btn); 
          // Clear button 
          JButton clear = new JButton("Clear"); 
          getContentPane().add(clear); 
    
          ButtonGroup radioButtons = new ButtonGroup(); 
          radioButtons.add(addRadioButton); 
          radioButtons.add(subtractRadioButton); 
          getContentPane().add(addRadioButton); 
          getContentPane().add(subtractRadioButton); 
         } 
    
         public static void main(String args[]) { // Creating the main method 
          frame frame = new frame(); // creating an object of the ShowGridLayout class, object is frame. 
          frame.setVisible(true); 
          frame.setSize(400, 200); 
          frame.setResizable(false); 
          frame.setLocationRelativeTo(null); 
          frame.setTitle("Calculator"); 
          frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
          ; 
         } 
    
        } 
    
    +0

    @Parkash Jat 请给我一个第二个选项的例子,我没有看到它的例子:) –

    +0

    我已经编辑了我的回复,并附上我和@JeriesHG的建议样本代码 – user3190129

    +0

    Thaaaaaaaaaaaank你这么多,我会检查他们,再次感谢你@ user3190129 –

    0

    让我看看,如果我完全明白,一个按钮的操作取决于在一个复选框?如果这是正确的,那么你可以有一个布尔值的复选框的值或只是检查“isSelected”功能,并在行动执行方法,我只是做一个布尔检查并执行我需要的方法。

    JButton btn = new JButton("Calculate"); 
    btn.addActionListener(new ActionListener() { 
    if(chckbxNewCheckBox.isSelected()){ 
        //do something here 
    }else{ 
        //do this 
    } 
    } 
    

    编辑: 我也将具有在一个分离的方法“进行动作”按钮,以便重复使用的代码。 (如果我需要在另一个按钮或类似的东西中使用相同的方法)。

    +0

    你的想法是真棒,但是当你上面提到的它的使用chckbxNewCheckBox无法识别,因为它是干训局后和之前未声明,对此有何建议? –

    +0

    看来@ user3190129回答了这个问题,对不起,我花了一点时间回答。希望它有效! – JeriesHG