- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我在JFrame1
的JTextField
中输入名字、姓氏等信息时然后点击下一步按钮,输入的数据将显示最后一个JFrame
上所有输入的数据。
示例:这是动画gif,最后一帧是我想要的,因为我仍然不知道如何制作它:
我该怎么做?如果这是一个新手问题,我很抱歉,但我正在学习..
我正在使用 NetBeans GUI 构建器。
编辑:如果我做得正确的话,我会像这样创建 idk...
public class User {
private String username;
private String password;
public User() {
username = null;
password = null;
}
public User getUser() {
User user = new User();
username = TexUsername.getText();
return user;
}
}
在我的 DisplayFrame 中,我不知道里面放了什么
public void setUser(User user) {
// idk what to put here... maybe the jLabel? please help
}
问题的新更新
我的StudentRegistrationForm_1.java
上的按钮
private void jButton_NextActionPerformed(java.awt.event.ActionEvent evt) {
try {
User user = new User(TexUsername.getText(),Password.getPassword());
StudentRegistrationForm_3 form = new StudentRegistrationForm_3(user);
form.setUser(user);
this.dispose();
} catch(Exception e){JOptionPane.showMessageDialog(null, e);}
/*
new StudentRegistrationForm_2().setVisible(true);
this.dispose();*/
}
和类(class)
public class User {
private String name;
private char[] password;
public User(String name, char[] password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public char[] getPassword() {
return password;
}
}
public User getUser() {
User user = new User(TexUsername.getText(), Password.getPassword());
return user;
}
而StudentRegistrationForm_3
我添加了这样的构造函数和方法
StudentRegistrationForm_3(User user) {
name.setText(user.getName());
}
public void setUser(User user) {
name.setText(user.getName());
}
我不知道为什么仍然给我 null...即使我输入了用户名和密码的值..
最佳答案
将信息从应用程序的一部分传递到另一个应用程序将取决于程序的结构。
在基本层面上,我建议将第一个屏幕中的值包装到某种自定义对象中。让我们使用User
.
User
将存储 accountName
的属性和password
如private
实例字段,可以通过 getter 访问。
基本上,你会在第一个屏幕上有某种 getter 来生成 User
对象并将其传递回调用者。
第二个屏幕要么采用 User
对象作为构造函数的参数或作为 setter。
大概,您会传递 User
对象从编辑器 Pane 到 View Pane actionPerformed
你的方法JButton
例如...
public class NewAccountPane extends JPanel {
/*...*/
public User getUser() {
User user = new User();
/* Take the values from the fields and apply them to the User Object */
return user;
}
}
public class AccountDetailsPane extends JPanel {
/*...*/
public void setUser(User user) {
/* Take the values from the User object
* and apply them to the UI components
*/
}
}
在你的 actionPerformed
中方法...
public void actionPerformed(ActionEvent evt) {
User user = instanceOfNewAccountPane.getUser();
instanceOfAccountDetailPane.setUser(user);
// Switch to instanceOfAccountDetailPane
}
根据问题更新进行了更新
你的用户对象几乎是正确的,但我会去掉 getUser
方法。 User
对象不应该有 UI 的概念,也不应该需要直接与之交互...
所以而不是...
public class User {
private String username;
private String password;
public User() {
username = null;
password = null;
}
public User getUser() {
User user = new User();
username = TexUsername.getText();
return user;
}
}
我会做一些类似的事情
public class User {
private String username;
private char[] password;
public User(String username, char[] password) {
this.username = username;
this.password = password;
}
public String getUserName() {
return username;
}
public char[] getPassword() {
return password;
}
}
所以当您调用 getUser
时来自您的NewAccountPane
,您将构建 User
基于表单上字段值的对象。
基本工作示例
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
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.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Passon {
public static void main(String[] args) {
new Passon();
}
private JPanel basePane;
private EditorPane editorPane;
private DisplayPane displayPane;
public Passon() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
basePane = new JPanel(new CardLayout());
basePane.add((editorPane = new EditorPane()), "Editor");
basePane.add((displayPane = new DisplayPane()), "Display");
((CardLayout)basePane.getLayout()).show(basePane, "Editor");
frame.add(basePane);
JPanel buttons = new JPanel();
JButton next = new JButton("Next >");
buttons.add(next);
frame.add(buttons, BorderLayout.SOUTH);
next.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CardLayout layout = (CardLayout) basePane.getLayout();
displayPane.setUser(editorPane.getUser());
layout.show(basePane, "Display");
((JButton)e.getSource()).setEnabled(false);
}
});
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class User {
private String name;
private char[] password;
public User(String name, char[] password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public char[] getPassword() {
return password;
}
}
public class EditorPane extends JPanel {
private JTextField name;
private JPasswordField password;
public EditorPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(new JLabel("User: "), gbc);
gbc.gridy++;
add(new JLabel("Password: "), gbc);
gbc.gridy = 0;
gbc.gridx++;
name = new JTextField(20);
password = new JPasswordField(20);
add(name, gbc);
gbc.gridy++;
add(password, gbc);
}
public User getUser() {
User user = new User(name.getText(), password.getPassword());
return user;
}
}
public class DisplayPane extends JPanel {
private JLabel name;
public DisplayPane() {
name = new JLabel();
setLayout(new GridBagLayout());
add(name);
}
public void setUser(User user) {
name.setText(user.getName());
}
}
}
更新更多内容
传递值是编程的基本原则。
在您的代码中,我可以看到您有两个选择..
在 jButton_NextActionPerformed
您的StudentRegistrationForm_1
同学们,你们现在正在做这个...
private void jButton_NextActionPerformed(java.awt.event.ActionEvent evt) {
new StudentRegistrationForm_3().setVisible(true);
// How is StudentRegistrationForm_3 suppose to reference the User object??
User user = new User(TexUsername.getText(),Password.getPassword());
this.dispose();
}
但是 StudentRegistrationForm_3
没有办法访问User
您创建的对象。
在 jButton_NextActionPerformed
您的StudentRegistrationForm_1
类,您可以通过 User
对象 StudentRegistrationForm_3
实例的构造函数你创建的
private void jButton_NextActionPerformed(java.awt.event.ActionEvent evt) {
User user = new User(TexUsername.getText(),Password.getPassword());
new StudentRegistrationForm_3(user).setVisible(true);
this.dispose();
}
或者修改StudentRegistrationForm_3
有一个接受 User
的方法对象
private void jButton_NextActionPerformed(java.awt.event.ActionEvent evt) {
User user = new User(TexUsername.getText(),Password.getPassword());
StudentRegistrationForm_3 form = new StudentRegistrationForm_3(user);
form.setUser(user);
this.dispose();
}
无论哪种方式,您都需要修改 StudentRegistrationForm_3
类来支持这一点。
关于java - 如何将 JTextField 从 JFrame 传递到另一个 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18296398/
我是一名优秀的程序员,十分优秀!