Paint Swing JButton已禁用

时间:2013-12-14 15:17:02

标签: java swing jbutton paintcomponent

我想将普通的JButton显示为已禁用,而不将其设置为setEnabled(false)!

我只想表明此按钮未启用,但如果用户按下按钮,则应正常调用actionlistener。

所以我做的是:

import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class SwingTests {

    private static void createWindow() {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        MyButton button = new MyButton("Press");
        button.setEnabled(false);

        panel.add(button);
        frame.add(panel);
        frame.setSize(200, 200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

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

class MyButton extends JButton {
    private boolean enabled = false;

    public MyButton(String text) {
        super(text);
        super.setEnabled(true);
    }

    @Override
    protected void paintBorder(Graphics g) {
        if (isEnabled())
            super.paintBorder(g);
        else
            ; // paint disabled button
    }

    @Override
    protected void paintComponent(Graphics g) {
        if (isEnabled())
            super.paintComponent(g);
        else
            ; // paint disabled button
    }

    @Override
    public void setEnabled(boolean b) {
        enabled = b;
    }

    @Override
    public boolean isEnabled() {
        return enabled;
    }
}

我"只是"需要知道在paintComponent(g)和paintBorder(g)中写什么。

2 个答案:

答案 0 :(得分:1)

  

如果它被禁用并且用户按下按钮我会显示警报,为什么禁用此按钮!

如果它看起来已经禁用,我可能不会首先推动它。您可以使用工具提示实现此类效果。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;

public class TestGUI {
    public TestGUI() {
        JFrame frame = new JFrame();
        final JButton button = new JButton("Press Me");
        final JToggleButton enable = new JToggleButton("Enable / Disable");
        enable.setSelected(true);
        button.setToolTipText("Enabled");
        enable.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                if (enable.isSelected()) {
                    button.setEnabled(true);
                    button.setToolTipText("Enabled");
                } else {
                    button.setEnabled(false);
                    button.setToolTipText("Not Enabled");
                }

            }

        });
        frame.add(button, BorderLayout.CENTER);
        frame.add(enable, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

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

答案 1 :(得分:0)

  

如果它被禁用并且用户按下按钮我会显示警报,为什么禁用此按钮!

禁用时,将ButtonListener添加到按钮。然后你可以处理mouseClicked()事件来显示你的“警报”。