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