通过Java Swing传递参数

时间:2013-06-18 17:27:30

标签: java swing

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

p.s任何帮助甚至是关于此的教程都表示赞赏。 谢谢

1 个答案:

答案 0 :(得分:1)

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

将此对象分配给Component(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;
    }
}