Я изменяю внешний вид некоторых 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 использовать свои пользовательские границы?
Спасибо. Я перешел на перезапись 'paintComponent()' и 'paintBorder()'. Я не совсем доволен этим путем, но это было проще всего, не нарушая других LaFs. – radlan