簡體   English   中英

java Component的getSize()返回負值

[英]java Component's getSize() returning negative values

我有一個有趣的情況,間歇性地從調用JLabel的方法getSize()得到負值。 我想調整JLabel的大小來抓住可能的最大空間,但我常常像這個問題一樣顛倒它。 似乎在獲得負值后立即獲得正確的值。 我幾乎可以肯定這是由我糟糕的GUI /邏輯線程架構引起的線程競爭問題,但是,我注意到如果我刪除了我對父JPanel所做的這種解決方法,問題就會消失。

我已經嘗試在進行值賦值時添加一個synchronized塊,之前我做了jlabel.verify(),但沒有任何幫助。 不幸的是,我真的需要保持我提到的解決方法。

我要感謝提前解決這個問題的任何指導。

這是一個截圖:

http://i.stack.imgur.com/YAmTy.png

這種情況發生的唯一方法是,如果另一個進程正在更改分配時間componentWidth變量和讀取其值的時間之間的jlabel。 可能的情況是jlabel的初始化發生在后台線程中,並且在分配componentWidth變量時未完成。

我不確定究竟是什么導致了這個問題,但我通過專門設置首選大小來解決它(請記住,我的大部分內容都返回0,0作為首選大小),之后我才調用:

setExtendedState( this.getExtendedState()|JFrame.MAXIMIZED_BOTH );

現在:

    setExtendedState( this.getExtendedState()|JFrame.MAXIMIZED_BOTH );
    setPreferredSize(getSize());

@Override
public void paint(Graphics g) {
    setPreferredSize(getSize()); // Update to current size
    super.paint(g);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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