2013-03-27 4 views
1

Я изменяю внешний вид некоторых JMenuItems во всплывающем меню на основе некоторых параметров и выбранного в данный момент пункта меню.Настройка границы JMenuItems с Nimbus 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. Нимбус просто игнорирует все эти свойства.

Фон нарисован, когда я установил item.setOpaque(true), но все же граница не отображается. Как заставить Nimbus использовать свои пользовательские границы?

ответ

2
  • Nimbus LaF по умолчанию игнорировать setBackground, setForeground и т.д.

  • Nimbus LaF по умолчанию никогда не игнорировать setBackground, setForeground, в Xxx(Cell)Renderer (не как-то в связи с вашим вопросом)


есть два пути (более езды)

  • JMenuItem сек paintComponent(), paintBorder(), paintChildren

  • все собственно Keys in Nimbus Defaults,

+0

Спасибо. Я перешел на перезапись 'paintComponent()' и 'paintBorder()'. Я не совсем доволен этим путем, но это было проще всего, не нарушая других LaFs. – radlan