2012-06-11 2 views
0

Я строю простой графический интерфейс для своего приложения. У меня есть пара JPanels. Я хочу отобразить их в зависимости от действия, которое было выполнено щелчком по JButton. Как отключить один JPanel и включить другой?изменить JPanel после нажатия на кнопку

Пара деталей. У меня есть класс с JFrame, где я создаю стартовый gui. Где у меня кнопки и какой-то текст. При нажатии на одну из кнопок, следует изменить вид в этом JFrame

моей кнопки определения

JButton btnStart = new JButton("Start"); 
    btnStart.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

     } 
    }); 
    btnStart.setBounds(10, 11, 110, 23); 
    contentPane.add(btnStart); 

// редактировать

Я нашел проблему. кнопки были в статическом методе

ответ

3

Простой, как:

jframe.setContentPane(your_new_panel); 
jframe.invalidate(); 
jframe.validate(); 
+0

Как я могу получить jframe? Это внутренний класс, поэтому он не имеет доступа к нему. – Fixus

+0

Если вы расширяете JFrame, у вас уже есть доступ к методу setContentPane. –

+0

как структурирован ваш код? вы унаследовали от JFrame? –

4
  1. Возможно, вы захотите использовать CardLayout.
  2. Или вы можете просто удалить oldpanel и добавить новую панель:

contentPane.remove(oldPanel); 
contentPane.add(newPanel); 
+0

тот же вопрос, что и выше. Как добраться до contentPane из внутреннего класса? – Fixus

+1

@Fixus: вам не нужно получать контентную панель. Вам просто нужна ссылка на любой класс, обрабатывающий компонент, использующий cardlayout, и вызов любого общедоступного метода, который вы предоставили классу, который будет иметь вас подкачки. Для Suraj: ваш CardLayout rec лучше, чем замена компонентов, поскольку CardLayout учитывает размер компонента. Также вам не нужно беспокоиться о вызове 'revalidate()' и 'repaint()' (который вы, похоже, забыли в своем ответе). –

+0

Если его JFrame, вы можете получить contentPane, используя: "frame.getContentPane()" –

Смежные вопросы