我是Java的新手,只想问一个简单的问题 我有我的第一个表单和一个文本字段,我在那里输入一个文本,我点击按钮 将出现一个新表单,文本字段中的文本将成为新表单的标签
我尝试使用此代码但不起作用
public class Data extends javax.swing.JFrame {
public Data() {
initComponents();
FrmLogIn f = new FrmLogIn();
User.setText(f.UName.getText());
User.setVisible(true);
}
答案 0 :(得分:2)
有很多方法可以解决这个问题。您可以创建自己的JDialog
来处理输入要求(在大多数情况下我可能会这样做),但如果您处理的事情稍微简单一些,JOptionPane
提供了一个高度可配置的现成对话框
当然,没有什么能阻止你混合使用两个(自定义JDialog
和JOptionPane
)
public class TestLogin01 {
public static void main(String[] args) {
new TestLogin01();
}
public TestLogin01() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}
LoginPane loginPane = new LoginPane();
String userName = null;
boolean validUser = false;
int result = JOptionPane.CANCEL_OPTION;
do {
result = JOptionPane.showConfirmDialog(null, loginPane, "Login", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
switch (result) {
case JOptionPane.OK_OPTION:
// Verify user details..
userName = loginPane.getUserName();
char[] password = loginPane.getPassword();
// Simple random test...
validUser = ((int) (Math.round(Math.random() * 1))) == 0 ? true : false;
if (!validUser) {
JOptionPane.showMessageDialog(null, "Inavlid username/password", "Error", JOptionPane.ERROR_MESSAGE);
}
break;
}
} while (!validUser && result != JOptionPane.CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
if (validUser) {
JOptionPane.showMessageDialog(null, "Welcome back valued user " + userName, "Welcome", JOptionPane.INFORMATION_MESSAGE);
}
}
}
});
}
public class LoginPane extends JPanel {
private JTextField userName;
private JPasswordField passwordField;
public LoginPane() {
userName = new JTextField(10);
passwordField = new JPasswordField(10);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel("User name: "), gbc);
gbc.gridy++;
add(new JLabel("Password: "), gbc);
gbc.gridy = 0;
gbc.gridx++;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(userName, gbc);
gbc.gridy++;
add(passwordField, gbc);
}
public String getUserName() {
return userName.getText();
}
public char[] getPassword() {
return passwordField.getPassword();
}
}
}
您可能希望阅读How to create GUIs with Swing和How to use dialogs以获取更多信息。
答案 1 :(得分:1)
看到您的代码,似乎您没有包含事件处理部分(并且您需要包含它以完成工作)
作为简要介绍,您需要在代码中执行此操作:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
FrmLogIn f = new FrmLogIn();
User.setText(f.UName.getText());
f.setVisible(true);
}
}
注意:假设User
是JLabel
而UName
是JTextField
FrmLogIn
已延长JFrame
,您已设置JFrame
有关事件处理的更多信息,请查看here
编辑2 :
示例代码段 - 你想要这样的东西(它只是一个粗略的让你知道如何继续前进)
编辑3
由@madProgrammer评论 - 用null
替换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.*;
import javax.swing.JTextField;
class FrmLogIn extends JFrame{
JLabel User;
public FrmLogIn() {
setLayout(new FlowLayout());
setSize(200,200);
User = new JLabel("");
// User.setBounds(20,30,100,40);
add(User);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
class ForTest extends JFrame{
JButton enter;
JTextField UName;
public ForTest() {
setLayout(new FlowLayout());
setSize(300,300);
enter = new JButton("enter");
//enter.setBounds(20,20,100,30);
UName = new JTextField();
//UName.setBounds(40,80,60,30);
add(UName);
add(enter);
setVisible(true);
enter.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
FrmLogIn f = new FrmLogIn();
f.User.setText(UName.getText());
f.setVisible(true);
setVisible(false);
}
});
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new ForTest();
}
}