簡體   English   中英

Java重繪不正確顯示組件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM