Как вызвать панель из кнопки с помощью ActionListener - PullRequest
1 голос
/ 15 мая 2019

Итак, я делаю простую программу, которая переходит с панели на панель и использую кнопку ActionListener, чтобы сделать прыжок.Какой метод или операцию я использую для перехода с панели на панель?

Я пытался использовать setVisible (true);под действием слушателя, но я получаю просто пустой экран.Пробовал с помощью setContentPane (differentPanel);но это не работает

ackage Com.conebind.Characters;
import Com.conebind.Tech.TechA16;
import Com.conebind.Overviews.OverviewA16;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Char_A16 extends JFrame {

    private JButton combosButton16;
    private JButton techButton16;
    private JButton overviewButton16;
    private JLabel Image16;
    private JPanel panel16;
    private JPanel panelOverviewA16;
    public Char_A16() {
        overviewButton16.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                OverviewA16 overview16 = new OverviewA16();
             overview16.setVisible(true);
             overview16.pack();
             overview16.setContentPane(new Char_A16().panelOverviewA16);
            }
        });
        techButton16.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                //Todo
            }
        });

        }

    private void createUIComponents(){

        Image16 = new JLabel(new ImageIcon("Android 16.png"));
    }
    public static void main (String[] args){
        JFrame frame = new JFrame("Android 16");
        frame.setContentPane(new Char_A16().panel16);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);}
}

setContentPane (OverviewA16) не работает, поскольку нет объекта, определяющего панель.

1 Ответ

0 голосов
/ 15 мая 2019

Пожалуйста, отметьте этот демонстрационный проект , показывающий, как использовать CardLayout с IntelliJ IDEA GUI Designer.

CardLayout 1

CardLayout 2

Основная форма имеет метод, который переключается между 2 формами, отображаемыми внутри:

  public void showPanel(String id) {
    final CardLayout cl = (CardLayout) cardPanel.getLayout();
    cl.show(cardPanel, id);
  }

Обе формы добавляются в макет карты при инициализации основной формы:

FormOne one = new FormOne();
one.setParentForm(this);
cardPanel.add(one.getPanel(), FORM_ONE);
FormTwo two = new FormTwo();
two.setParentForm(this);
cardPanel.add(two.getPanel(), FORM_TWO);
final CardLayout cl = (CardLayout) cardPanel.getLayout();
cl.show(cardPanel, FORM_ONE);

Ссылка на основную родительскую форму передается этим двум формам с использованием метода setParentForm(), чтобы классы FormOne и FormTwo могли получить доступ к методу showPanel() MainForm.

В более простом случае у вас может быть кнопка или другой элемент управления, который переключает формы расположенный непосредственно на MainForm, вам может не понадобиться передавать основную ссылку на форму подчиненным формам, но это может быть полезно в зависимости от логики вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...