Ссылаться на компонент JPanel из отдельного класса

#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();