JPanel 上活動繪圖之上的 JTextFields:線程問題
假設您想在可以添加哪些 Swing 使用者介面元素。這涉及到在不需要更新每一幀的背景上對紅色矩形進行動畫處理。相反,背景被渲染到 BufferedImage 上,並且僅重繪了清除矩形先前位置所需的部分。
但是,在將 JTextField 添加到 JPanel 並關注它之後,清除了先前的位置每次遊標閃爍時矩形的失敗。這是因為 Swing 不是線程安全的,並且圖像是非同步繪製的。
要解決此問題,您需要呼叫超類別的方法並在PaintComponent() 方法中刪除舊的繪製:
或者,您可以根據需要簡化程式碼並進行最佳化。例如,您可能不需要使用插入、額外緩衝區或元件偵聽器。
附錄:
在建構子中設定背景顏色就不需要使用在paintComponent()中填充面板,而super.paintComponent()允許文字欄位正常運作。如前所述,這種解決方法很脆弱。最好簡化程式碼並根據需要進行最佳化。
附錄2:
super.paintComponent() 呼叫UI delegate 的update() 方法,此方法填入如果其opaque 屬性為true,則指定元件及其背景顏色。您可以使用 setOpaque(false) 來防止這種情況。
以上是在 JPanel 上組合 JTextField 和動畫繪圖時,如何防止 Swing 的線程問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!