Мой прослушиватель действий JButton не работает

Мой ActionListener кодирует JButton для перехода к другому JPanel, но он не работает должным образом, хотя раньше работал. Мой код выглядит следующим образом:

JButton btnNext = new JButton("Next");
btnNext.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
      JPanel contentPane = new ListofDuties2(myFrame);
      myFrame.getContentPane().removeAll();
      myFrame.setContentPane(contentPane);
      myFrame.setVisible(true);
   }
});
btnNext.setBounds(194, 381, 89, 23);
add(btnNext);

Я не совсем уверен, что с ним не так.


person zelo    schedule 05.07.2014    source источник
comment
Ознакомьтесь с CardLayout, чтобы получить более понятный подход.   -  person Paul Samsotha    schedule 05.07.2014


Ответы (2)


При добавлении/удалении компонентов из видимого графического интерфейса основной код:

panel.remove(...);
panel.add();
panel.revalidate(); // to invoke the layout manager
panel.repaint();

Вопрос в том, почему вы используете removeAll()? Каждый раз, когда я вижу такой код, это означает, что вам, вероятно, следует использовать макет карты., а затем просто поменяйте панели местами.

person camickr    schedule 05.07.2014

btnNext.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JPanel contentPane = new ListofDuties2(myFrame);
                myFrame.getContentPane().removeAll();
                myFrame.setContentPane(contentPane);
                myFrame.getContentPane().revalidate();
                myFrame.setVisible(true);
            }} );  

Вы забыли ); в конце

Также вызовите revalidate().

person An SO User    schedule 05.07.2014
comment
Не делает removeAll автоматически недействительным? а пользователю нужно перепроверить? - person BlackBox; 05.07.2014
comment
@BlackBox О да! Оно делает! Виноват! - person An SO User; 05.07.2014