簡體   English   中英

java swing更新問題

[英]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()方法調整大小,我提供xyheightwidth 這些對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.

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