2011-11-26 43 views
2

我遇到了一個非常奇怪的問題,使用JMenuBar在菜單所屬的JFrame的contentPane中的兩個JMenus結果之間導航以重新繪製不正確。內容窗格僅在菜單項下拉和屏幕「髒」的情況下呈現正確的背景 - 其餘全部爲白色。但是,這隻發生在兩個菜單之間瀏覽之後,而不是馬上。在空白contentPane從普通背景顏色改變之間切換需要幾秒鐘的時間。JMenuBar導致內容窗格重新繪製不正確

編輯爲了澄清,這是在Windows 7上使用JDK 1.7.0。

爲了更好地說明我的意思,這裏是啓動(手動調整)之後的窗口: The window upon launch

,然後使用JMenus幾秒鐘後: The content pane is now incorrectly painted

下面是一個SSCCE演示有問題的代碼。

package com.test.workspace; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.SwingUtilities; 

public class MenuBarTest extends JFrame { 

    /** 
    * Eclipse-generated SUID. 
    */ 
    private static final long serialVersionUID = 8836700685077107497L; 

    public MenuBarTest() { 
     JMenuBar menuBar = new JMenuBar(); 

     JMenu testMenu = new JMenu("Test"); 
     JMenuItem testItem = new JMenuItem("TestItem"); 

     JMenu breakMenu = new JMenu("Break"); 
     JMenuItem breakItem = new JMenuItem("BreakItem"); 

     testMenu.add(testItem); 

     breakMenu.add(breakItem); 

     menuBar.add(testMenu); 
     menuBar.add(breakMenu); 

     this.setJMenuBar(menuBar); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MenuBarTest test = new MenuBarTest(); 
       test.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       test.pack(); 
       test.setVisible(true); 
      }   
     }); 
    } 
} 
+0

我在XP上看不到使用JDK6_7的任何問題。 – camickr

+0

Mac OS X上沒有工件。內容窗格[不透明度](http://java.sun.com/products/jfc/tsc/articles/painting/index.html#props)的任何機會都未得到尊重? – trashgod

+0

@trashgod我想過不透明,但是設置'setOpaque(true)'對我沒有任何影響,所以我把它從SSCCE中刪除了。我開始懷疑它是否確實是一個特定於平臺的錯誤 - 下一步是讓我在不同的操作系統或JDK上檢查它。 –

回答

1

它必須是平臺特定的東西。我的機器上的GUI顯得很好:Ubuntu 11.10,Eclipse 3.7,Sun JDK 7.

+0

在發佈這篇文章後,我懷疑它可能與JDK1.7相關,但現在我更加迷失了方向。現在可以在XP或JDK1.6上試試它了。 –