首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Swing 彈出對話框後主界面渲染異常:重繪機制缺失排查

     編輯:程式設計綜合問答

現象

主窗口顯示正常,點擊按鈕彈出 JOptionPane / JDialog,關閉後主窗口部分組件消失、重疊或空白。

原因

  • 模態對話框阻塞事件分發線程(EDT),關閉時 EDT 需重新分發 paintEvent。
  • 若主窗口使用自定義繪製(paintComponent)且狀態依賴臨時變量,對話框關閉導致狀態丟失。
  • 部分 Look&Feel 在重繪時未正確處理 RepaintManager 脏區域。

解決

  1. 對話框關閉後顯式調用 mainFrame.repaint() 或 mainFrame.validate()。
  2. 確保自定義繪製組件**狀態獨立於臨時變量**,所有繪製所需數據為成員字段。
  3. 嘗試設置 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()) 排除 L&F 問題。

代碼示例

JButton btn = new JButton("彈窗");
btn.addActionListener(e -> {
    JOptionPane.showMessageDialog(frame, "內容");
    frame.repaint(); // 關鍵行
});
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved