使JButton看起来被禁用但接收输入?

时间:2019-06-11 03:13:38

标签: java swing jbutton jcomponent

基本上,我希望禁用JButton外观,但不要禁用它,以便它仍然产生动作事件。如果有人可以提供帮助,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用鼠标侦听器。但是在这种情况下,您无法集中注意此按钮,因此将不会获得任何键事件。示例:

import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;

/**
 * <code>ButtonExample</code>.
 */
public class ButtonExample {

    public static void main(String[] args) {
        JFrame frm = new JFrame("Button example");
        JButton btn = new JButton("Click Me");
        btn.addActionListener(e -> JOptionPane.showMessageDialog(frm, "Message"));
        btn.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                btn.setEnabled(true);
                btn.doClick(0);
                btn.setEnabled(false);
            }
        });
        btn.setEnabled(false);
        frm.setLayout(new FlowLayout());
        frm.add(btn);
        frm.setSize(400, 200);
        frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frm.setLocationRelativeTo(null);
        frm.setVisible(true);
    }
}

还有另一种方法-覆盖按钮UI的paintText方法。但是这种方式并不常见,并且依赖外观(因此对于某些L&F可能不起作用)。如果您需要这种方法,我也可以为您提供建议。