Java 如何创建具有多个页面的swing应用程序

Java 如何创建具有多个页面的swing应用程序,java,swing,Java,Swing,早些时候,我使用servlet创建了一个小应用程序,其中第一个页面显示一个用户注册页面,该页面通过提交按钮捕获基本信息,如用户的名字和姓氏等 假设在第一页中输入的用户名是“Scott”,那么一旦用户提交了表单,那么在第二页中,我就创建了一条欢迎消息“welcome Scott”。然后,我提供了一个选项,可以通过连接到数据库查看先前已注册到应用程序的用户列表 现在我想在Swing应用程序中实现同样的功能。我不熟悉Swings,所以我尝试从各种来源学习它,但我找不到一个可以在多个帧/面板之间导航的示

早些时候,我使用servlet创建了一个小应用程序,其中第一个页面显示一个用户注册页面,该页面通过提交按钮捕获基本信息,如用户的名字和姓氏等

假设在第一页中输入的用户名是“Scott”,那么一旦用户提交了表单,那么在第二页中,我就创建了一条欢迎消息“welcome Scott”。然后,我提供了一个选项,可以通过连接到数据库查看先前已注册到应用程序的用户列表

现在我想在Swing应用程序中实现同样的功能。我不熟悉Swings,所以我尝试从各种来源学习它,但我找不到一个可以在多个帧/面板之间导航的示例

对于我创建的第一个页面,下面是一个显示文本字段和提交按钮的程序:

import java.awt.FlowLayout;
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.JTextField;

public class UserRegistration extends JFrame {

    JButton button;

    public UserRegistration() {

        setSize(300,300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());

        final JLabel label = new JLabel("Please enter details: ");
        JLabel firstName = new JLabel("First Name");
        JLabel lastName = new JLabel("Last Name");
        final JTextField firstNameTxt = new JTextField(20);
        final JTextField lastNameTxt = new JTextField(20);

        button = new JButton("Submit");
        JButton button1 = new JButton("Cancel");

        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                dispose();
                UserDetails user = new UserDetails();
                user.showDetails();
                user.setVisible(true);
            }
        });

        add(label);
        add(firstName);
        add(firstNameTxt);
        add(lastName);
        add(lastNameTxt);
        add(button);
        add(button1);

        setVisible(true);

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

}
要从第一帧转到第二帧,我使用以下行:

                dispose();
                UserDetails user = new UserDetails();
                user.showDetails();
                user.setVisible(true);
现在,在第二页中,我无法找到如何获取用户输入的参数,这是我一直坚持的代码:

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

public class UserDetails extends JFrame {

    //private JFrame mainFrame;
    private JLabel headerLabel;
    private JLabel statusLabel;
    private JPanel controlPanel;

    public UserDetails() {
        prepareGUI();
    }


    private void prepareGUI() {
        //mainFrame = new JFrame("Java Swing Examples");
        setSize(800, 800);
        setLayout(new GridLayout(3, 5));
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent windowEvent) {
                System.exit(0);
            }
        });
        headerLabel = new JLabel("This is Header", JLabel.CENTER);
        statusLabel = new JLabel("This is Status", JLabel.CENTER);

        statusLabel.setSize(350, 100);

        controlPanel = new JPanel();
        controlPanel.setLayout(new FlowLayout());

        System.out.println(controlPanel);
        add(headerLabel);
        add(controlPanel);
        add(statusLabel);
        //setVisible(true);
    }

    public void showDetails() {

        // Here I want display the welcome message and also to add all the registered user details.
    }
}

请帮助我如何创建包含多个页面的应用程序?

Swing提供了CardLayout类来提供您需要的内容。它允许您加载两个或多个组件(JPanel)并允许共享相同的显示。它可以像向导一样在卡片之间导航。请阅读本教程:

Swing提供了CardLayout类来提供您需要的内容。它允许您加载两个或多个组件(JPanel)并允许共享相同的显示。它可以像向导一样在卡片之间导航。请阅读本教程:

使用
stringfirstname=UserRegistration.firstNameTxt.getText()showDetails()
方法中的code>获取在
firstNameTxt
中输入的文本,您不希望在第二个
JFrame
中使用新的
main
方法。在一个应用程序中,您只有一个
main
方法。您可以重用现有的
JFrame
,但首先调用
removeAll
,然后添加新内容。当您准备好第一个“屏幕”时,您使用构造函数将数据和jframe传递到第二个“屏幕”,例如,
newuserdetails(firstframe,data)
@CoolGuy,
FirstNameTxt
是构造函数中的局部变量,因此我无法在不同的类中访问它。另外,如果我在第一个类中将该变量作为实例变量,那么我需要一种方法将UserRegistration对象传递给第二个类以访问其属性。那么我怎么才能通过呢?@geert3,现在我删除了第二节课的主要方法,因为它与我的问题无关,谢谢你指出。你能给我看一些代码,说明我如何在第二节课中重复使用同一个框架,以及如何删除组件吗?@user3181365,哎呀。我想我没注意。只需在构造函数外部声明
firstNameTxt
,并使用
user.showDetails(firstNameTxt.getText(),lastNameTxt.getText())将
firstNameTxt.getText()和
lastNameTxt.getText()传递给
showDetails()
actionPerformed()
中编写>并将
showDetails()
的声明更改为
public void showDetails(String firstName,String lastName)
使用
String firstName=UserRegistration.firstNameTxt()showDetails()
方法中的code>获取在
firstNameTxt
中输入的文本,您不希望在第二个
JFrame
中使用新的
main
方法。在一个应用程序中,您只有一个
main
方法。您可以重用现有的
JFrame
,但首先调用
removeAll
,然后添加新内容。当您准备好第一个“屏幕”时,您使用构造函数将数据和jframe传递到第二个“屏幕”,例如,
newuserdetails(firstframe,data)
@CoolGuy,
FirstNameTxt
是构造函数中的局部变量,因此我无法在不同的类中访问它。另外,如果我在第一个类中将该变量作为实例变量,那么我需要一种方法将UserRegistration对象传递给第二个类以访问其属性。那么我怎么才能通过呢?@geert3,现在我删除了第二节课的主要方法,因为它与我的问题无关,谢谢你指出。你能给我看一些代码,说明我如何在第二节课中重复使用同一个框架,以及如何删除组件吗?@user3181365,哎呀。我想我没注意。只需在构造函数外部声明
firstNameTxt
,并使用
user.showDetails(firstNameTxt.getText(),lastNameTxt.getText())将
firstNameTxt.getText()和
lastNameTxt.getText()传递给
showDetails()
actionPerformed()
中编写>并将
showDetails()
的声明更改为
public void showDetails(String firstName,String lastName)