Java 不同帧中的JTextField数据,数据存储在全局变量中?
我有两个帧,每个帧有一个textfield,我想在其中一个帧的第一个帧textfield中捕获一个字符串,并将其传递给textfield中的另一个帧,但将数据保存在全局变量类型字符串中 (对不起我的英语)Java没有“全局”变量,您不想使用它。相反,您希望在某种程度上按照M-V-C模型(模型视图控件)构造代码,并在模型中保留关键文本字符串。然后,您可以让任何GUI窗口监听模型对该变量的更改,然后它们可以做出相应的反应 如果您只想让两个JTextFields共享完全相同的文本,那么您可以做的另一件事就是让它们共享相同的模型——JTextFields文档 另一方面,请注意,您很少希望GUI同时显示多个JFrame。如果需要第二个相关窗口,请使用JDialog之类的对话框Java 不同帧中的JTextField数据,数据存储在全局变量中?,java,variables,Java,Variables,我有两个帧,每个帧有一个textfield,我想在其中一个帧的第一个帧textfield中捕获一个字符串,并将其传递给textfield中的另一个帧,但将数据保存在全局变量类型字符串中 (对不起我的英语)Java没有“全局”变量,您不想使用它。相反,您希望在某种程度上按照M-V-C模型(模型视图控件)构造代码,并在模型中保留关键文本字符串。然后,您可以让任何GUI窗口监听模型对该变量的更改,然后它们可以做出相应的反应 如果您只想让两个JTextFields共享完全相同的文本,那么您可以做的另一件
编辑
比如说
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.*;
import javax.swing.event.SwingPropertyChangeSupport;
public class SharedData {
private static void createAndShowGui() {
SimpleModel model = new SimpleModel();
MyPanel1 panel1 = new MyPanel1(model);
MyPanel2 panel2 = new MyPanel2(model);
JFrame frame = new JFrame("SharedData");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel1);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JDialog dialog = new JDialog(frame, "Dialog", false);
dialog.getContentPane().add(panel2);
dialog.pack();
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class MyPanel2 extends JPanel {
private JTextField field = new JTextField(10);
private UpdateAction updateAction = new UpdateAction("Update");
private JButton updateDataBtn = new JButton(updateAction);
private SimpleModel model;
public MyPanel2(SimpleModel model) {
this.model = model;
field.addActionListener(updateAction);
add(field);
add(updateDataBtn);
}
private class UpdateAction extends AbstractAction {
public UpdateAction(String name) {
super(name);
}
@Override
public void actionPerformed(ActionEvent e) {
if (model != null) {
model.setMyText(field.getText());
}
}
}
}
class MyPanel1 extends JPanel {
private JTextField field = new JTextField(10);
private SimpleModel model;
public MyPanel1(SimpleModel model) {
field.setFocusable(false);
this.model = model;
add(field);
model.addPropertyChangeListener(new ModelListener());
}
private class ModelListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (SimpleModel.MY_TEXT.equals(evt.getPropertyName())) {
field.setText(model.getMyText());
}
}
}
}
class SimpleModel {
public static final String MY_TEXT = "my text";
private SwingPropertyChangeSupport support = new SwingPropertyChangeSupport(this);
private String myText = "";
public String getMyText() {
return myText;
}
public void setMyText(String myText) {
String oldValue = this.myText;
String newValue = myText;
this.myText = myText;
support.firePropertyChange(MY_TEXT, oldValue, newValue);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
support.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
support.removePropertyChangeListener(listener);
}
}
import javax.swing.*;
public class SharedData2 {
private static void createAndShowGui() {
JTextField field1 = new JTextField(10);
JTextField field2 = new JTextField(10);
// ******** key below
field2.setDocument(field1.getDocument());
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
panel1.add(field1);
panel2.add(field2);
JFrame frame = new JFrame("SharedData2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel1);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JDialog dialog = new JDialog(frame, "Dialog", false);
dialog.add(panel2);
dialog.pack();
int x = frame.getLocation().x + 200;
int y = frame.getLocation().y + 200;
dialog.setLocation(x, y);
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
编辑2
如果您希望两个JTextFields与用户输入的数据共享相同的数据,那么让它们共享模型(JTextFields的文档)。比如说
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.*;
import javax.swing.event.SwingPropertyChangeSupport;
public class SharedData {
private static void createAndShowGui() {
SimpleModel model = new SimpleModel();
MyPanel1 panel1 = new MyPanel1(model);
MyPanel2 panel2 = new MyPanel2(model);
JFrame frame = new JFrame("SharedData");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel1);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JDialog dialog = new JDialog(frame, "Dialog", false);
dialog.getContentPane().add(panel2);
dialog.pack();
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class MyPanel2 extends JPanel {
private JTextField field = new JTextField(10);
private UpdateAction updateAction = new UpdateAction("Update");
private JButton updateDataBtn = new JButton(updateAction);
private SimpleModel model;
public MyPanel2(SimpleModel model) {
this.model = model;
field.addActionListener(updateAction);
add(field);
add(updateDataBtn);
}
private class UpdateAction extends AbstractAction {
public UpdateAction(String name) {
super(name);
}
@Override
public void actionPerformed(ActionEvent e) {
if (model != null) {
model.setMyText(field.getText());
}
}
}
}
class MyPanel1 extends JPanel {
private JTextField field = new JTextField(10);
private SimpleModel model;
public MyPanel1(SimpleModel model) {
field.setFocusable(false);
this.model = model;
add(field);
model.addPropertyChangeListener(new ModelListener());
}
private class ModelListener implements PropertyChangeListener {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (SimpleModel.MY_TEXT.equals(evt.getPropertyName())) {
field.setText(model.getMyText());
}
}
}
}
class SimpleModel {
public static final String MY_TEXT = "my text";
private SwingPropertyChangeSupport support = new SwingPropertyChangeSupport(this);
private String myText = "";
public String getMyText() {
return myText;
}
public void setMyText(String myText) {
String oldValue = this.myText;
String newValue = myText;
this.myText = myText;
support.firePropertyChange(MY_TEXT, oldValue, newValue);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
support.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
support.removePropertyChangeListener(listener);
}
}
import javax.swing.*;
public class SharedData2 {
private static void createAndShowGui() {
JTextField field1 = new JTextField(10);
JTextField field2 = new JTextField(10);
// ******** key below
field2.setDocument(field1.getDocument());
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
panel1.add(field1);
panel2.add(field2);
JFrame frame = new JFrame("SharedData2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel1);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JDialog dialog = new JDialog(frame, "Dialog", false);
dialog.add(panel2);
dialog.pack();
int x = frame.getLocation().x + 200;
int y = frame.getLocation().y + 200;
dialog.setLocation(x, y);
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
我解决了这个问题
////第1帧(princiio.java)send///此帧发送内容
private void txtingresaKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()==KeyEvent.VK_ENTER){
fecha_1 obj = new fecha_1();
obj.setVisible(true);
fecha_1.txtfin.setText(txtingresa.getText());
this.setVisible(false);
}
}
///////第2帧(fecha_1.java)接收内容//////////
private void txtfinKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()==KeyEvent.VK_ENTER){
periodo();
txtini.setText(null);
String fu = principio.txtingresa.getText();
txtfin.setText(fu);//INGRESA REPETIDAMENTE EL VALOR INGRESADO EN PRINCIPIO CAJA TXTINGRESA
}
}
//代码重复,但从不删除给他第一个表单的默认内容(princiio.java)公开你的框架告诉我们你试图做什么…@HovercraftFullOfEels为什么?我写了一小部分可读代码///frame send“princiio”//这里我有TXTINGRES///////////frame收到“date\u 1”//////////principio obj=new PRINCIPSIIO();字符串fin2=obj.txtingress.getText();千万不要在JTextField中使用KeyListener,因为它会扰乱JTextField对文本的处理(通过键绑定)。最好将ActionListener添加到JTextField中,因为按enter键会激活它。