我的程序遇到了另一个问题。我已经制作了几个JButton子类来专门做我需要他们做的事情。问题是按钮不会显示,直到我点击它们应该在的位置或者我将鼠标悬停在它们上面(当我将setRolloverEnabled()设置为true时)。我最初将它们都设置为setRolloverEnabled()为true。但我明白,当我把鼠标悬停在它们上面时,它有一个丑陋的蓝色轮廓的按钮,我完全不喜欢。那么有没有办法让它们可见而不必将鼠标悬停在它们上面,或者不必点击它们?
我有一个关于我的JFrame的背景(我将JPanel分类并覆盖了paintComponent()方法),允许JFrame保持其作为容器的角色)。另外在Adobe Photoshop中我设计了按钮,在外边缘它有一些透明度,我将文件保存为.png,因此保持透明度,但当按钮放在框架中时,仍然有一个丑陋的蓝色轮廓它应该是透明的。对此有任何帮助。
任何建议将不胜感激。下面是我的一个Button类的代码。
public class Button extends javax.swing.JButton {
//This Button class is not the AWT Button object.
//It is a custom class designed by me.
public Button(ImageIcon normal){
setRolloverEnabled(false);
setVisible(true);
setIcon(normal);
setSize(normal.getIconWidth(),normal.getIconHeight());
}
public Button(ImageIcon normal, ImageIcon rollover){
this(normal);
setRolloverIcon(rollover);
}
public Button(ImageIcon normal, ImageIcon rollover,ImageIcon selected){
this(normal,rollover);
setSelectedIcon(selected);
}
}
答案 0 :(得分:2)
很有可能您没有在Event Dispatch Thread中创建GUI。 Swing绘画是单线程设计。如果您尝试绘制组件(即使您没有故意这样做),结果也会有所不同。有充分记录的方法可以正确地指示jvm绘制组件,包括SwingWorker
和SwingUtilities.invokeLater(Runnable)
。请查看this tutorial以获取更多信息。