基本上,我希望禁用JButton外观,但不要禁用它,以便它仍然产生动作事件。如果有人可以提供帮助,我将不胜感激!
答案 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可能不起作用)。如果您需要这种方法,我也可以为您提供建议。