启用/禁用其他类的表单按钮

时间:2012-06-26 13:05:27

标签: java swing jframe jbutton

你好我的问题是:我无法从另一个类启用表单的按钮。我的表单类是

public class FileSending {
   //Function for enabling the button 
   public void activate_btnSEND (boolean flag) {
       SendFile.setEnabled(flag);      
   }    
}

我调用此函数的类如下:

public class SMS {
   Public void split(){
      if(check_string.equalsIgnoreCase("0001"))  {                
           JOptionPane.showMessageDialog(null, " Recepient Has Accepted The" +
                                " Request.Connection Has Been Established :) ");  
           FileSending setBtn = new FileSending();
           setBtn.activate_btnSEND(true);               
      }
   }
}

我调试了代码以检查传递给flag的值,值是“True”。它也进入if条件,但Button未启用。我不明白这里发生了什么!!

2 个答案:

答案 0 :(得分:2)

代码中的一些要点:

  1. 首先,你启用/解除,如果flag为true,你可以看到它。您应该使用setEnabled(b),因此SendFile.setVisible(true);将成为SendFile.setEnabled(true);
  2. 从不比较此if(flag == true)的布尔值,它应该只是if(flag)
  3. 你的方法应该是这样的:

    public void changeStateOfButton (boolean flag) {
    //now what ever you pass will decide whether to enable or disable the button.
      myButton.setEnabled(flag); 
    }
    
  4. 或者更好的是,你应该使用JToggleButton来做这些事情。

  5. 同时提高您的变量命名技能。

  6. 我所说的一个小例子:

    public class TestButtonEnable {
      public static void main(String[] args) {
          JFrame frame = new JFrame("TestButtonEnable");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setSize(200, 200);
          frame.setLayout(new BorderLayout());
          JButton button = new JButton("Enable that button");
          final MyPanel panel = new MyPanel();
          button.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                  JOptionPane.showMessageDialog(null, "Some message. :)");
                  panel.changeStateOfButton(true); // call second class method here
              }
          });
          frame.add(button, BorderLayout.NORTH);
          frame.add(panel, BorderLayout.SOUTH);
          frame.setVisible(true);
      }
    }
    

    第二节包含jbutton:

    class MyPanel extends JPanel {
        private JButton button;
        public MyPanel() {
            button = new JButton("Enable me");
            button.setEnabled(false); // disabled by default
            this.add(button);
        }
        public void changeStateOfButton (boolean flag) {
            button.setEnabled(flag); 
        }
    }
    

答案 1 :(得分:2)

检查你是否创建了多个FileSending类的对象.... 你不能创建那个类的多个对象...... 检查是否有一个对象是作为GUI类的一部分创建的,另一个是作为SMS类的一部分创建的。

只使用FileSending类的一个对象