我是 Java Swing 的新手,所以我的问题可能有点含糊。我已经有一个 Java 项目,我需要创建一个 GUI,用户将在其中提供 ''box'' 4-5 个值,这些值将传递到我已经存在的项目中。
ps 任何帮助,即使是关于这方面的教程,我们都将不胜感激。谢谢
有一个简单的方法可以做到这一点。在组件的构造函数(例如 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;
}
}