【发布时间】:2014-01-02 07:25:36
【问题描述】:
我想将普通 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) 中要写什么。
【问题讨论】:
-
“我只是想表明这个按钮没有被启用,但是如果用户按下这个按钮,它应该像往常一样调用 actionlistener。” 听起来又是一个“不可用” GUI 正在制作中。真正有意义的用例是什么?
-
"按钮未启用,但如果用户按下按钮,它应该正常调用 actionlistener" 按钮是否应该是彩蛋?我不知道你想达到什么目的。
-
我知道这违反了适当的 GUI 设计,并且“听起来像是另一个正在制作中的'不可用的 GUI'”你是部分正确的!但我想要这个,因为如果它被禁用并且用户按下按钮,我会显示一个警报,为什么这个按钮被禁用!
标签: java swing jbutton paintcomponent