有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在JFrame中的JPanel之间切换

现在我知道这方面有很多很多问题,我已经读了十几篇。但我刚刚撞到墙了,我弄不清它的头绪

这是我的问题

我有三个小组课

ConfigurePanel.java
ConnectServerPanel.java
RunServerPanel.java

还有我的JFrame课程

StartUPGUI.java

这是启动时初始化的内容

private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    startUp = new sjdproject.GUI.ConfigurePanel();
    runServer = new sjdproject.GUI.RunServerPanel();
    serverConnect = new sjdproject.GUI.ConnectServerPanel();

    setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);

    jPanel1.setLayout(new java.awt.CardLayout());
    jPanel1.add(startUp, "card2");
    jPanel1.add(runServer, "card4");
    jPanel1.add(serverConnect, "card3");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addContainerGap(27, Short.MAX_VALUE)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 419, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(38, 38, 38))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(27, 27, 27)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 281, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(30, Short.MAX_VALUE))
    );

我的StartUPGUI首先调用StartUpPanel。在我的创业板里。java我有一个按钮,可以在StartUPGUI中调用setPanel方法

    StartUpGUI s = new StartUpGUI(); 
    String str = "";
    if(runserverbtn.isSelected()){
         str =  "runserver";
    }
    else if(connectserverbtn.isSelected()){
        str = "connectserver";
    }
    else{
        str = "";
    }
    s.setPanel(str);

这是我的setPanel方法

void setPanel(String str){
     if(str == "runserver"){

    }
    else if(str == "connectserver"){

    }

    else{
    }
}

我需要在if块中放置什么来更改面板视图?我会假设jPanel1。但我不知道那是什么


共 (1) 个答案

  1. # 1 楼答案

    "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. 不要将字符串与==进行比较,它将不起作用。使用.equalsif("runserver".equals(str)){

    2. 您需要使用来自CardLayout的方法.show

      CardLayout.show(jPanel1, "whichPanel");
      
      • public void show(Container parent, String name)-使用addLayoutComponent,翻转到以指定名称添加到此布局的组件。如果不存在这样的组件,那么什么也不会发生

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

    有关更多详细信息,请参见How to Use CardLayout,有关更多方法,请参见API


    更新

    试着运行这个例子,并用你的代码检查它,看看你是否注意到任何有用的东西

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

    更新2

    问题是,按钮在ConfigurePanel类中。尝试在该类中创建一个新的StartUPGUI不会引用相同的组件。您需要做的是将StartUPGUI的引用传递给ConfigurePanel。像这样的

        public class ConfigurePanel extends JPanel {
            StartUPGUI startup;
    
            public ConfigurePanel(StartUPGUI startup) {
                this.startup = startup;
            }
    
            ....
            public void actionPerformed(ActionEvent e) {
                startup.setPanel("runserver");
    
            }
        }
    

    然后像这样从StartUPGUI实例化ConfigurePanel

        new ConfigurePanel(StartUPGUI.this);