2013-03-27 88 views
1

我正在修改彈出式菜單中某些JMenuItems的外觀,它基於一些參數和當前選擇的菜單項。設置與Nimbus的JMenuItems邊界LaF

這是一個位的僞代碼(假,因爲它不顯示所有複雜的流程,但只有相關部分設置菜單項的屬性):

JMenuItem item= new JMenuItem("text"); 
Border border= calculateBorderForItem(); 
item.setBorder(border); 
[...] 
item.addMouseListener(new MouseAdapter() { 
    public void mouseEntered(MouseEvent e) { 
    Color bg= calculateBackgroundForItem(); 
    item.setBackground(bg); 
    } 
} 

該作品使用默認的Metal LaF以及JGoodies PlasticXP LaF,但與Nimbus LaF不兼容。 Nimbus只是忽略了所有這些屬性。

當我設置item.setOpaque(true)時,背景被繪製,但仍然沒有顯示邊框。我如何強制Nimbus使用我的自定義邊框?

回答

2
  • Nimbus LaF默認忽略setBackgroundsetForeground

  • Nimbus LaF默認從來沒有忽略setBackgroundsetForeground,在Xxx(Cell)Renderer(不以某種方式與你的問題的連接)


有兩種方法(通過over程)

+0

感謝。我已經去覆蓋'paintComponent()'和'paintBorder()'。我並不完全高興,但這是最容易做到的,而不會破壞其他LaF。 – radlan 2013-03-27 14:42:11