Java 启用一个JButton并禁用另一个JButton

Java 启用一个JButton并禁用另一个JButton,java,swing,jbutton,Java,Swing,Jbutton,在我的ui中有两个按钮,它们重新指向两个JFrames。我试图使如果用户按下按钮1,按钮2变为禁用,如果用户按下按钮2,按钮1变为禁用,因此用户不能同时打开JFrames import java.awt.*; import java.awt.event.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.*; public class Main exten

在我的ui中有两个按钮,它们重新指向两个
JFrame
s。我试图使如果用户按下按钮1,按钮2变为禁用,如果用户按下按钮2,按钮1变为禁用,因此用户不能同时打开
JFrame
s

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

在按钮一的
ActionListener
中,添加

ButtonTwo.setEnabled(false);
在按钮二的
ActionListener
中添加

ButtonOne.setEnabled(false);
别忘了添加相应的启用(
按钮。setEnable(true)
),否则将留下两个禁用的按钮。可能在关闭
JFrames
的事件中

编辑:

您可以编写这样的方法

public void enableButtons()
{
   button1.setEnabled(true);
   button2.setEnabled(true);
}
在JFrame关闭事件中调用此方法。
这解释了JFrame关闭事件。

请查看按钮组以获得更优雅的解决方案


您真的不应该使用多个帧(签出)。相反,使用一个框架并使用
CardLayout
在面板之间切换。不仅用户更容易使用,而且您不必担心他们同时按下两个按钮。要使按钮不可单击,请调用
button.setEnable(false)
,因为您试图实现一个选择UI,并且只选择两个选项中的一个,所以您可能希望使用或。我尝试过,如果按下按钮1,按钮2将保持禁用状态,除非我们关闭应用程序,反之亦然。这就是为什么它将保持禁用状态直到结束。从逻辑上考虑,您希望何时再次启用按钮?如果我正确理解您的程序,您可能希望在用户关闭JFrame后启用按钮。我已经按照您所说的@nbz进行了尝试,但它不起作用。是的,这会很有帮助。您的windowClose事件似乎连接到主对象。您希望事件与两个JFrame关闭事件挂钩。