【发布时间】:2012-04-13 16:15:34
【问题描述】:
我正在开发一个 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
【问题讨论】:
-
也许
pack()会解决它。否则,发布SSCCE。
标签: java swing components panel repaint