#java #swing #jcomponent
#java #swing #jcomponent
Вопрос:
Освоился с программированием на Java и создал простую игру.
Я хочу создать для него графический интерфейс, содержащий два разных «экрана». Лучший способ, который я нашел для замены экранов, — это использовать CardLayout.
Итак, у меня есть панель контейнера, которая содержит как IntroPanel, так и GamePanel.
Выполнив
contPanel.setLayout(cl);
contPanel.add(introPanel, "1");
contPanel.add(gamePanel, "2");
cl.show(contPanel, "1");
Я могу изменить значение show с 1 на 2, и это изменит отображаемую панель.
Это работает нормально, мой вопрос: как я могу ссылаться на jButton1, который находится на внутренней панели? Я хочу добавить обработчик событий в JButton, но из этого класса (чтобы я мог менять панели местами)
Спасибо,
Майк
Код:
public static void main(String[] args) {
boolean playAgain = true;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame GUI = new JFrame();
GUI.setVisible(true);
GUI.setSize(500, 500);
GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CardLayout cl = new CardLayout();
// Different Panels //
JPanel contPanel = new JPanel();
JPanel introPanel = new IntroPanel();
JPanel gamePanel = new GamePanel();
introPanel.jLabel1.getText();
// Card layout //
contPanel.setLayout(cl);
contPanel.add(introPanel, "1");
contPanel.add(gamePanel, "2");
cl.show(contPanel, "1");
GUI.add(contPanel);
}
});
Ответ №1:
Я полагаю, что ваша внутренняя панель расширяет JPanel. Вероятно, вы сделали это с помощью графического интерфейса Netbeans, поэтому jpanel1 является частным экземпляром. Сначала добавьте это в код вашей внутренней панели:
public JButton getJButton1() {
return jbutton1;
}
и вызывать его из этого класса следующим образом:
JButton jbutton1 = introPanel.getJButton1();