如何在某些子句上禁用JButton?

Sha*_*wat 3 java swing jbutton

我正在制作一个小项目,其中我有一个JFrame5 JButtons.3 JButtons是主要关注的问题,默认情况下已启用.

我想要的是,除非其中任何一个JButtons被按下,否则2的其余部分应保持禁用状态.

我尝试过ActionListner,MouseListener但无济于事.

检查我尝试过的多个代码.

public void mousePressed (MouseEvent me){    
     if (me.getButton() == MouseEvent.NOBUTTON ){

        proceedBtn.setEnabled(false);
        proceedBtn.setToolTipText("Please Enter A Button Before Proceeding");
    }
    else {                   
        proceedBtn.setEnabled(true);        
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我试过的另一段代码.

public void mousePressed (MouseEvent me){    
     if (me.getClickCount == 0 ){

        proceedBtn.setEnabled(false);
        proceedBtn.setToolTipText("Please click a button Before Proceeding");
    }
    else {                   
        proceedBtn.setEnabled(true);        
    }

}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?我甚至试过mouseClicked相同代码的方法但没有发生任何事情.

mre*_*mre 6

您需要了解ActionListener类.正如@ harper89建议的那样,甚至还有关于如何编写动作侦听器的教程.我也建议你使用子类JButton,因为这似乎比查询ActionEvent源代码更合适.


这是一个例子 -

public final class JButtonDemo {
    private static DisabledJButton disabledBtnOne;
    private static DisabledJButton disabledBtnTwo;

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                createAndShowGUI();             
            }
        });
    }

    private static void createAndShowGUI(){
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        final JPanel disabledBtnPanel = new JPanel();
        disabledBtnOne = new DisabledJButton();
        disabledBtnTwo = new DisabledJButton();
        disabledBtnPanel.add(disabledBtnOne);
        disabledBtnPanel.add(disabledBtnTwo);
        panel.add(disabledBtnPanel);

        final JPanel enablerBtnPanel = new JPanel();
        enablerBtnPanel.add(new EnablerJButton("Button 1"));
        enablerBtnPanel.add(new EnablerJButton("Button 2"));
        enablerBtnPanel.add(new EnablerJButton("Button 3"));
        panel.add(enablerBtnPanel);

        frame.add(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private static final class DisabledJButton extends JButton{
        public DisabledJButton(){
            super("Disabled");
            setEnabled(false);
        }
    }

    private static final class EnablerJButton extends JButton{
        public EnablerJButton(final String s){
            super(s);
            addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e) {
                    if(!disabledBtnOne.isEnabled()){
                        disabledBtnOne.setEnabled(true);
                        disabledBtnOne.setText("Enabled");
                    }

                    if(!disabledBtnTwo.isEnabled()){
                        disabledBtnTwo.setEnabled(true);
                        disabledBtnTwo.setText("Enabled");
                    }
                }
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


如果您按下三个启用按钮中的任何一个,则根据您的请求,两个禁用按钮都将启用.