现在我知道对此有很多很多问题,我已经读了很多。但是我只是碰壁,我不能做它的正面或反面。

这是我的问题。

我有3个小组课程。

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。在我的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.something(),但是我不知道那是什么。

最佳答案

“我需要在if块中放入哪些内容以更改面板视图?我本来假设jPanel1.something(),但我不知道那是什么。”



不要将字符串与==进行比较,它将无法正常工作。使用.equals .. if("runserver".equals(str)){
您需要使用.show中的方法CardLayout

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

        }
    }


然后像这样从ConfigurePanel实例化StartUPGUI

    new ConfigurePanel(StartUPGUI.this);

07-24 09:24