启用一个JButton并禁用另一个

时间:2014-10-14 17:06:38

标签: java swing jbutton

我的ui中有两个按钮,它们会重定向到两个JFrame。我试图做到这一点,如果用户按下按钮1,按钮2被禁用,如果用户按下按钮2,按钮1将被禁用,因此用户无法同时打开JFrame。 / p>

import java.awt.*;
import java.awt.event.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;


 public class Main extends JFrame {

 public Main() {

JPanel panel = new JPanel();
getContentPane().add (panel,BorderLayout.NORTH);

JButton button1 = new JButton("One"); 
panel.add(button1);
JButton button2 = new JButton("Two");
panel.add(button2);

button1.addActionListener (new ActionListener()
  {
    public void actionPerformed (ActionEvent e)
      {
        button2.setEnabled(false);
        One f = new One();
        f.setSize(350,100);
        f.setVisible(true);
      }
   });  

button2.addActionListener (new ActionListener()
   {
    public void actionPerformed (ActionEvent e)
      {
            button1.setEnabled(false);
            Two fr = new Two();
            fr.setSize(350,100);
            fr.setVisible(true);
      }
    });

 public void enableButtons()
 {
    button1.setEnabled(true);
    button2.setEnabled(true);
 }

}

public static void main(String[] args) {

Main frame = new Main();
frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    enableButtons();
        System.exit(0);
  }
});
frame.setSize(300,200);
frame.setLocationByPlatform(true);
frame.setVisible(true);
  }
}

2 个答案:

答案 0 :(得分:1)

在按钮一的ActionListener中,添加

ButtonTwo.setEnabled(false);

并在按钮2的ActionListener添加

ButtonOne.setEnabled(false);

不要忘记添加相应的启用(button.setEnable(true)),否则您将有两个禁用按钮。也许是因为关闭了JFrames

编辑:

你可以写一个像这样的方法

public void enableButtons()
{
   button1.setEnabled(true);
   button2.setEnabled(true);
}

在JFrame关闭的情况下调用此方法。 这个tutorial解释了JFrame结束事件。

答案 1 :(得分:0)

查看ButtonGroup以获得更优雅的解决方案。

http://docs.oracle.com/javase/tutorial/uiswing/components/buttongroup.html