-3

我是 Java Swing 的新手,所以我的问题可能有点含糊。我已经有一个 Java 项目,我需要创建一个 GUI,用户将在其中提供 ''box'' 4-5 个值,这些值将传递到我已经存在的项目中。

ps 任何帮助,即使是关于这方面的教程,我们都将不胜感激。谢谢

4

1 回答 1

1

有一个简单的方法可以做到这一点。在组件的构造函数(例如 JFrame)中,您传递对对象的引用。

您将此对象分配给组件(JFrame)的内部变量,以便事件侦听器等方法可以访问它。

通过这种方式,您可以与您的项目进行交互。

例子:

在下面的示例中,我们在 main 中有一个线程,每秒打印 Person 的值。同时,当 JFrame 用于更改值时,它是可见的。

它提供了一个关于如何从 GUI 中修改现有对象的基本示例。

   import java.awt.BorderLayout;


public class NameEnterForm extends JFrame {

    private JPanel contentPane;
    private JTextField NameField;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    final Person ObjectToPass = new Person();
                    NameEnterForm frame = new NameEnterForm(ObjectToPass);
                    frame.setVisible(true);

                    Runnable printThread = new Runnable()
                    {
                        @Override
                        public void run() {
                            while(true)
                            {
                                System.out.println("Print Value:"+ ObjectToPass.getName());
                                try {
                                    Thread.sleep(1000);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                        }                       
                    };

                    new Thread(printThread).start();


                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }



    private Person ObjectToPass;
    private JButton btnGetName;

    /**
     * Create the frame.
     */
    public NameEnterForm(Person ObjectToPassRef) {

        //Set the object to class field
        this.ObjectToPass = ObjectToPassRef; 

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 110);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JButton SaveName = new JButton("Save Name");
        SaveName.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                ObjectToPass.setName(NameField.getText());
            }
        });
        SaveName.setBounds(10, 42, 118, 23);
        contentPane.add(SaveName);

        NameField = new JTextField();
        NameField.setBounds(66, 11, 206, 20);
        contentPane.add(NameField);
        NameField.setColumns(10);

        JLabel lblNewLabel = new JLabel("Name:");
        lblNewLabel.setBounds(10, 14, 46, 14);
        contentPane.add(lblNewLabel);

        btnGetName = new JButton("Get Name");
        btnGetName.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Name is:" + ObjectToPass.getName());
            }
        });
        btnGetName.setBounds(138, 42, 118, 23);
        contentPane.add(btnGetName);
    }
}

class Person
{

    private String Person;

    public void setName(String Person)
    {
        this.Person = Person;
    }

    public String getName()
    {
        return Person;
    }
}
于 2013-06-18T17:46:27.153 回答