Switching between JPanels in a JFrame

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-02 04:04:59

"What do I need to put inside the if blocks to change panel views? I would have assumed jPanel1.something() but I don't know what that something is."

  1. Don't compare string with ==, it will not work. Use .equals.. if("runserver".equals(str)){

  2. You need to use the method .show from the CardLayout

    CardLayout.show(jPanel1, "whichPanel");
    
    • public void show(Container parent, String name) - Flips to the component that was added to this layout with the specified name, using addLayoutComponent. If no such component exists, then nothing happens.

      void setPanel(String str){
          CardLayout layout = (CardLayout)jPanel1.getLayout();
          if("runserver".equals(str)){
              layout.show(jPanel1, "card4");
      
          }else if("connectserver".equals(str)){
             layout.show(jPanel1, "card3");
      
          } else{
              layout.show(jPanel1, "card2");
          }
      }
      

See How to Use CardLayout for more details and see the API for more methods.


UPDATE

Try running this example and examine it with your code to see if you notice anything that will help

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestCardLayout {

    PanelOne p1 = new PanelOne();
    PanelTwo p2 = new PanelTwo();
    PanelThree p3 = new PanelThree();

    CardLayout layout = new CardLayout();
    JPanel cardPanel = new JPanel(layout);

    public TestCardLayout() {
        JButton showOne = new JButton("Show One");
        JButton showTwo = new JButton("Show Two");
        JButton showThree = new JButton("Show Trree");
        JPanel buttonsPanel = new JPanel();
        buttonsPanel.add(showOne);
        buttonsPanel.add(showTwo);
        buttonsPanel.add(showThree);
        showOne.addActionListener(new ButtonListener());
        showTwo.addActionListener(new ButtonListener());
        showThree.addActionListener(new ButtonListener());

        cardPanel.add(p1, "panel 1");
        cardPanel.add(p2, "panel 2");
        cardPanel.add(p3, "panel 3");

        JFrame frame = new JFrame("Test Card");
        frame.add(cardPanel);
        frame.add(buttonsPanel, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    private class ButtonListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            String command = e.getActionCommand();
            if ("Show One".equals(command)) {
                layout.show(cardPanel, "panel 1");
            } else if ("Show Two".equals(command)) {
                layout.show(cardPanel, "panel 2");
            } else {
                layout.show(cardPanel, "panel 3");
            }
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                TestCardLayout testCardLayout = new TestCardLayout();
            }
        });
    }
}

class PanelOne extends JPanel {

    public PanelOne() {
        setBackground(Color.GREEN);
        add(new JLabel("Panel one"));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }
}

class PanelTwo extends JPanel {

    public PanelTwo() {
        setBackground(Color.BLUE);
        add(new JLabel("Panel two"));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }
}

class PanelThree extends JPanel {

    public PanelThree() {
        setBackground(Color.YELLOW);
        add(new JLabel("Panel three"));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }
}

UPDATE 2

The problem is, the the button is in the ConfigurePanel class. Trying to create a new StartUPGUI in that class, won't reference the same components. What you need to do is pass a reference of the StartUPGUI to the ConfigurePanel. Something like this

    public class ConfigurePanel extends JPanel {
        StartUPGUI startup;

        public ConfigurePanel(StartUPGUI startup) {
            this.startup = startup;
        }

        ....
        public void actionPerformed(ActionEvent e) {
            startup.setPanel("runserver");

        }
    }

And instantiate ConfigurePanel from the StartUPGUI like this

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