开发GUI应用程序,使用JSWing,我加载XML文件,然后反序列化它,然后我将所有创建的对象添加到JPanel。 但是,在我移动窗口或单击面板之前,这就是它们的样子
移动窗口后,它们看起来正确,所以如何解决这个问题<
我看了这个链接 http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics) 它可能是答案,因为在JComponent的构造函数中我使用
setOpaque(true);
但是我仍然不确定如何解决这个问题,因为文档的这部分内容很难理解(它对某些方面对我来说没有任何意义:-D)
顺便说一句,这幅画本身就是这样的for (NetObject o : objects) {
addNewObject(o);
}
和addNewObject(不是整个代码)
public void addNewObject(NetObject o) {
DraggableComponent object = new DraggableComponent(o, editorIndex); //Creates a draggableComponent
this.add(object);//Adds this component to main container
object.setOverbearing(true); //On click ,this panel gains lowest z-buffer
object.setSize(48, 48);
object.setLocation(o.x - 23, o.y - 23);
object.setBackground(Color.WHITE);
this.repaint(); //this = JPanel
}
和覆盖的paintComponent代码
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (isOpaque()) {
if (object.type == 2) { //tarnsition
g.drawImage(transition, 0, 0, this);
} else if (object.type == 1) {
boolean test = g.drawImage(place, 0, 0, this); //place
g.drawString(object.loadTokens(), 3, 27); // 1,2,3,4...
}
}
}
我试图调用this.revalidate - 在FOR EACH LOOP之后 - 没有帮助,唯一有效的方法是以某种方式移动窗口,奇怪的是,这个问题只存在于@Windows,我的同事正在开发这个完全相同的应用程序Linux,他没有遇到过图形问题。
我知道有很多这样的主题,但老实说我无法找到解决方案。
感谢您的回答, OSIRIS
答案 0 :(得分:4)
setBackground()
API提到“尊重此属性取决于外观和感觉,有些人可能会选择忽略它。”在paintComponent()
中明确设置图形上下文的颜色并调用fillRect()
。