3

很遗憾,我在使用 CardLayout 时遇到了麻烦。我想为每个单独的“卡片”使用单独的类,然后使用卡片内的按钮来更改显示的卡片。

我想我知道出了什么问题,尽管不知道为什么,目前我正在从其他类调用 createAndShowGUI() 方法,这样我就可以获取 switch 语句,但这似乎刷新了 switch 之前的所有代码。我不知道为什么这是一个问题,但是 cardLayout.next(contentpane) 在第一次运行时在 switch 语句中工作得非常好,但是当我从另一个类中的 ActionListener 调用它时就死了:

import java.awt.CardLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Bond extends JFrame{
    public static String Panel = "PROFILE";
    public static int PaneNo = 1;
    static int i = 0;
    static Profile callProfile = new Profile();
    static Profileset callProfileset = new Profileset();

    public static void main(String args[]){
        createAndShowGUI();
    }

    public static void createAndShowGUI(){
        final JPanel contentPane = new JPanel();
        if(0 == i++){       
            final JFrame frame = new JFrame("FaceTweet+");
            frame.add(contentPane);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(686,242);
            frame.setResizable(false);
            frame.setVisible(true);
        }

        contentPane.setLayout(new CardLayout());
        Profile JPprofile = new Profile();
        Profileset JPprofileset = new Profileset();
        contentPane.add(JPprofile, "JPprofile");
        contentPane.add(JPprofileset, "JPprofileset");
        CardLayout cardLayout = (CardLayout) contentPane.getLayout();

        switch(Panel){
            case "HOMEPAGE": break;
            case "PROFILE":
                cardLayout.first(contentPane);
                PaneNo = 1;
                while(PaneNo != 1){
                    cardLayout.next(contentPane);
                    System.out.println("1");
                    PaneNo++;}
                break;
            case "PROFILESET":
                cardLayout.first(contentPane);
                PaneNo = 1;
                while(PaneNo != 2){
                    cardLayout.next(contentPane);
                    System.out.println("2");
                    PaneNo++;}
                break;
            default:
                cardLayout.show(contentPane, "JPprofile");
                break;
        }
    }

    public static void exit(int status){
        System.exit(status);
    }
}

System.out.println() 只是告诉我代码是否通过 switch 语句,然后通过正确的大小写,并且它每次都会执行,但是它从不执行 cardLayout.next(contentpane) 从任一类 Profile 按下按钮后配置文件集。我希望这是足够的信息,如果您需要更多信息,请说,我会尝试使用所需的内容进行更新!谢谢!

4

0 回答 0