我使用netbeans创建了2个jframe。一个命名为登录,另一个命名为home。 我在登录框插入了一个文本字段来插入用户名。我还在主页框架上放置了一个标签,以显示在登录框架文本字段中输入的用户名。为此,我创建了全局变量,以便在登录框架中从用户名文本字段中获取文本。
public class Login extends javax.swing.JFrame {
public static String user;
user = txt_user.getText();
然后我在home类中创建了一个登录类实例来调用这个变量并将文本设置为我使用的标签。
public Home() {
initComponents();
date();
time();
Login l = new Login();
lbl_user.setText(l.user);
没有错误。但它不适合我。请帮帮我。 我也想知道以下方法的返回类型。
public getuser(){
String u = txt_user.getText();
return;
}
所以对此事的任何帮助表示赞赏。提前致谢。
答案 0 :(得分:2)
值得您努力学习手动编写UI,这样可以更容易地了解何时使用表单编辑器以及如何充分利用它们。
您应该将用户转储的窗口数限制为一个活动窗口,并使用对话框显示或提示用户以获取更多信息。有关详细信息,请参阅How to Make Dialogs
JFrame
不是阻止窗口,也就是说,当您将其显示时,代码将继续执行,这意味着,在您的情况下,您显示登录窗口,但用户没有时间在尝试设置标签的文本之前输入任何内容......
这是模态对话框的来源......
LoginPanel loginPane = new LoginPanel();
// This will wait here until the dialog is closed for some reason...
int result = JOptionPane.showConfirmDialog(this, loginPane, "Login", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
// Then you can determine what you want to do in response to the
// closing of the dialog
if (result == JOptionPane.OK_OPTION) {
label.setText("Welcome " + loginPane.getUsername());
}
可运行的例子......
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
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);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
JLabel label = new JLabel("Unknown user");
add(label);
LoginPanel loginPane = new LoginPanel();
int result = JOptionPane.showConfirmDialog(this, loginPane, "Login", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.OK_OPTION) {
label.setText("Welcome " + loginPane.getUsername());
}
}
}
public class LoginPanel extends JPanel {
private JTextField userName;
private JPasswordField password;
public LoginPanel() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
add(new JLabel("Username: "), gbc);
gbc.gridy++;
add(new JLabel("Password: "), gbc);
gbc.gridx++;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.EAST;
userName = new JTextField(20);
password = new JPasswordField(20);
add(userName, gbc);
gbc.gridy++;
add(password, gbc);
}
public String getUsername() {
return userName.getText();
}
public char[] getPassword() {
return password.getPassword();
}
}
}
答案 1 :(得分:1)
您需要注意何时使用static
变量。在这种情况下,您不需要static
,并且可以使用JFrame
来获取登录,您可以使用:
Home() {
initComponents();
String login = JOptionPane.showInputDialog(this, "Input your name");
}