[英]Java repaint not displaying component correctly
我正在開發一個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
setBackground()
API提到“尊重此屬性取決於外觀,有些人可能會選擇忽略它”。 在paintComponent()
顯式設置圖形上下文的顏色並調用fillRect()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.