Мне обычно не нужно задавать вопросы по Java, но сейчас я застрял больше, чем когда-либо, и думаю, что просто что-то упускаю снова и снова ..
У меня есть приложение JFrame, в котором есть JMenuBar. Элементы в строке меню имеют мой класс PageManager в качестве ActionListener. Отладка показывает, что все работает нормально. Весь лот инициализируется так:
public static void main(String[] args) {
UI ui = new UI(); //The JFrame
PageManager pm = new PageManager(ui); //Menu ActionListener
MenuBar mb = new MenuBar(pm); //MenuBar
ui.setJMenuBar(mb);
ui.setDefaultCloseOperation(0);
ui.setVisible(true);
ui.setPage(new Home().getPanel()); //a View
}
В классе пользовательского интерфейса у меня есть следующий метод:
public void setPage(JPanel p) {
System.out.println("Set page");
this.remove(page);
System.out.println("Removed");
this.add(p);
System.out.println("Added " + p);
}
Вызов метода ui.setPage(new Home().getPanel());
работает нормально. Если я перенесу его в конструктор PageManager, он тоже будет работать. Если я заменю его на ui.setPage(new Preferences().getPanel());
, это тоже работает. Классы Home и Preferences - это Views, которые создают JPanel и возвращают его с помощью метода getPanel.
Однако изменение страницы с помощью ActionListener, похоже, не работает. ВСЕ строки System.out.println печатаются нормально, но страница не изменяется. Я использую это в PageManager:
private void changePage(String s, int i) {
if(s.equals("P")) {
//Program options
System.out.println("program options");
if(i == 1) {
ui.setPage(pref.getPanel());
}
} else if(s.equals("C")) {
//Connection options
} else if(s.equals("A")) {
//Add rule
}
}
(ActionListener забирает событие, проверяет источник и вызывает с ним changePage).
Дело в том, что все работает и, кажется, работает нормально в зависимости от вывода на консоль, но страница не изменится, что бы я ни делал (включая небольшие модификации).
Любая помощь будет очень признательна !!!
С уважением,
Mark