-1

我是 Java 新手,只想问一个简单的问题 我有我的第一个表单和一个文本字段,我在其中输入一个文本,一旦我单击按钮,就会出现一个新表单,文本字段中的文本将是给新表格贴上标签

我尝试了这段代码,但它不起作用

public class Data extends javax.swing.JFrame {

  public Data() {
    initComponents();

    FrmLogIn f = new FrmLogIn();
    User.setText(f.UName.getText());
    User.setVisible(true);
}
4

2 回答 2

2

有很多方法可以解决这个问题。您可以创建自己的JDialog来处理输入要求(在大多数情况下我可能会这样做),但是如果您想要更简单的东西,JOptionPane可以提供一个高度可配置的现成对话框。

在此处输入图像描述在此处输入图像描述在此处输入图像描述

当然,没有什么能阻止你混合这两个概念(自定义JDialogJOptionPane

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();
        }
    }
}

您可能想阅读如何使用 Swing 创建 GUI如何使用对话框以获取更多信息。

于 2013-02-12T06:58:13.417 回答
1

看到您的代码,您似乎没有包含事件处理部分(并且您需要包含它才能完成工作)

作为简要介绍,您需要在代码中执行此操作:

button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                FrmLogIn f = new FrmLogIn();
                            User.setText(f.UName.getText());
                            f.setVisible(true);
                }
 }

注意:假设User是一个JLabelUName一个JTextField
并且FrmLogIn已经扩展JFrame并且您已经设置了必填字段,例如布局和大小JFrame

有关事件处理的更多信息,请查看此处

编辑 2

示例代码片段 - 你想要这样的东西(它只是一个粗略的,让你知道如何继续前进)

编辑
@madProgrammer 评论的 3 - 将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();
    }
}
于 2013-02-12T05:01:26.550 回答