[英]java swing update problem
我有一個Frame類(擴展JInternalFrame)。 在類中我實例化JPanel並初始化setVisisble(false)
。 在用戶單擊框架中的buttom並進行一些處理之后,我調用JPanel內部的方法來更新其中一個標簽。 然后我在JPanel上執行setVisible(true)
。
但是,在我的一個標簽上調用setText()
后,JPanel沒有正確“刷新”。 在處理並將JPanel設置為可見(並且我確認正確的數據存在等)之后,JPanel仍然處於其初始化形式。
換句話說,我需要做什么才能在框架內的JPanel上調用setText()
實際刷新Panel?
基本上我想知道:如果更新嵌套在JFrame內的swing組件內的標簽文本,更新是否可見? 如果不是,需要做些什么才能刷新?
試試這個:
myPanel.invalidate()
如果這不起作用,那么可能嘗試發布一些代碼。
為什么你提前創建JPanel? 為什么不用正確的文字重新創建它,第一次?
每次更改標簽時,您可能需要重新驗證面板; 即:
myPanel.validate()
這個額外的面板需要完成什么? 也許你應該使用一個對話框; 或者只是將JPanel添加到現有框架中。
謝謝你的所有答案。 事實上,我沒有發布任何代碼,這使得無法找出問題(我現在意識到)。 這個課程相當大,因為我不知道問題在哪里撒謊,我只是概述了我認為相關的內容。
在任何情況下,經過多次挖掘后,如果有人碰到類似的東西,會出現什么問題:
我在JPanel
中創建的JLabels
使用setBounds()
方法調整大小,我提供x
, y
, height
和width
。 這些對setBounds()
調用最初是在初始化JPanel
時完成的。 此外, height, width
參數是從標簽動態拉出的(使用getMinimumHeight()
等,因此標簽的大小根據其中的文本大小而定)。 問題是一些標簽正在被初始化而沒有文本導致寬度為0.所以后來當我調用setText()
,它正常工作,除了寬度為0的事實(文本在那里,我只是看不到它!)。
無論如何......解決方案只是在每次使用setText()
時在標簽上調用setBounds()
(不僅僅是最初)。
你沒有給我們太多的幫助。 這里有一些常見的事情需要檢查。
你是否覆蓋了JInternalFrame的任何繪制方法? 如果是這樣,請確保在繪畫完成后調用基類版本。 基類版本處理諸如面板邊框和其他GUI對象剪切之類的東西。
您確定接收setText()調用的標簽變量與您添加到JPanel的標簽變量相同嗎?
為了完全可靠地在GUI中應用內存中對象的更改,您需要調用相應對象的validate()和repaint()方法。 validate()對最新的更改進行“提交”操作。 因此,如果更改標簽的文本,即使調用repaint(),也可能無法看到更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.