How to call a panel from a button with ActionListener

梦想的初衷 提交于 2021-01-28 07:27:45

问题


So I'm making a simple program that jumps from panel to panel and am using an actionlistener Button to make the jump. What kind of method or operation do I use to jump from panel to panel?

I tried to use setVisible(true); under the action listener, but I get just a blanks screen. Tried using setContentPane(differentPanel); but that doesn't work.

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);}
}

The setContentPane(OverviewA16) doesn't work because there's not an object that defines the panel.


回答1:


Please check this demo project showing how to use CardLayout with IntelliJ IDEA GUI Designer.

The main form has a method that switches between 2 forms displayed inside it:

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

Both forms are added to the card layout during the main form initialization:

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

A reference to the main parent form is passed to these 2 forms using setParentForm() method so that FormOne and FormTwo classes can access the showPanel() method of the MainForm.

In a more basic case you may have a button or some other control that switches the forms located directly on the MainForm, then you may not need passing the main form reference to the subforms, but it can be still useful depending on your app logic.



来源:https://stackoverflow.com/questions/56139074/how-to-call-a-panel-from-a-button-with-actionlistener

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!