Я изменил внешний вид на Nimbus, как описано здесь.
Работает нормально, за исключением JCheckBoxMenuItems, где исчезли галочки. Цвет выделения тоже неверный.
Это код всплывающего меню с JCheckBoxMenuItems:
public class FilterByNodeUI
{
private JPopupMenu filterMenu;
private PopupMenuButton menu;
private JMenu eventLogFilters, commandFilters;
private JCheckBoxMenuItem[] commandsPeriodicalItems, commandsPeriodicalAllPortsItems;
private JCheckBoxMenuItem alarm, connection, standard;
private String id;
public FilterByNodeUI(Node node)
{
this.id = node.getIp();
filterMenu = new JPopupMenu();
eventLogFilter();
int cpNbr = node.getCommands().getCommandsPeriodical().size();
int cpapNbr = node.getCommands().getCommandsPeriodicalAllPorts().size();
commandsPeriodicalItems = new JCheckBoxMenuItem[cpNbr];
commandsPeriodicalAllPortsItems = new JCheckBoxMenuItem[cpapNbr];
commandFilters = new JMenu("Commands");
for(int i = 0; i < cpNbr; i++)
{
commandsPeriodicalItems[i] = menuItemFactory(node.getCommands().getCommandsPeriodical().get(i).getCommand());
commandFilters.add(commandsPeriodicalItems[i]);
}
commandFilters.addSeparator();
for(int i = 0; i < cpapNbr; i++)
{
commandsPeriodicalAllPortsItems[i] = menuItemFactory(node.getCommands().getCommandsPeriodicalAllPorts().get(i).getCommand());
commandFilters.add(commandsPeriodicalAllPortsItems[i]);
}
filterMenu.add(eventLogFilters);
filterMenu.add(commandFilters);
menu = new PopupMenuButton(node.getDispName(), filterMenu);
commandFilterListeners(commandsPeriodicalItems, node, true);
commandFilterListeners(commandsPeriodicalAllPortsItems, node, false);
}
private void eventLogFilter()
{
alarm = menuItemFactory("Alarm messages");
standard = menuItemFactory("Standard messages");
connection = menuItemFactory("Connection messages");
eventLogFilters = new JMenu("Event Log Messages");
eventLogFilters.add(alarm);
eventLogFilters.add(connection);
eventLogFilters.add(standard);
}
private JCheckBoxMenuItem menuItemFactory(String name)
{
JCheckBoxMenuItem tmp;
tmp = new JCheckBoxMenuItem(name);
tmp.setSelected(true);
tmp.setUI(new StayOpenCheckBoxMenuItemUI()); // I set a new UI here
return tmp;
}
}
Вот как это выглядит сейчас:
Мне кажется, что новый внешний вид не применялся к элементам JCheckBoxMenuitems или JMenu.
Причина проблемы в том, что я установил новый пользовательский интерфейс для hte JCheckBoxMenuItems, потому что я не хочу закрывать всплывающее меню, когда пользователь проверяет/снимает отметку с элемента.
Вот код:
public class StayOpenCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI
{
@Override
protected void doClick(MenuSelectionManager msm)
{
menuItem.doClick(0);
}
public static ComponentUI createUI(JComponent c)
{
return new StayOpenCheckBoxMenuItemUI();
}
}
Есть ли способ сохранить эту открывающуюся функцию рядом с нимбом?
MainFrame
илиmenu
. - person splungebob   schedule 16.10.2014