Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同帧中的JTextField数据,数据存储在全局变量中?_Java_Variables - Fatal编程技术网

Java 不同帧中的JTextField数据,数据存储在全局变量中?

Java 不同帧中的JTextField数据,数据存储在全局变量中?,java,variables,Java,Variables,我有两个帧,每个帧有一个textfield,我想在其中一个帧的第一个帧textfield中捕获一个字符串,并将其传递给textfield中的另一个帧,但将数据保存在全局变量类型字符串中 (对不起我的英语)Java没有“全局”变量,您不想使用它。相反,您希望在某种程度上按照M-V-C模型(模型视图控件)构造代码,并在模型中保留关键文本字符串。然后,您可以让任何GUI窗口监听模型对该变量的更改,然后它们可以做出相应的反应 如果您只想让两个JTextFields共享完全相同的文本,那么您可以做的另一件

我有两个帧,每个帧有一个textfield,我想在其中一个帧的第一个帧textfield中捕获一个字符串,并将其传递给textfield中的另一个帧,但将数据保存在全局变量类型字符串中

(对不起我的英语)

Java没有“全局”变量,您不想使用它。相反,您希望在某种程度上按照M-V-C模型(模型视图控件)构造代码,并在模型中保留关键文本字符串。然后,您可以让任何GUI窗口监听模型对该变量的更改,然后它们可以做出相应的反应

如果您只想让两个JTextFields共享完全相同的文本,那么您可以做的另一件事就是让它们共享相同的模型——JTextFields文档

另一方面,请注意,您很少希望GUI同时显示多个JFrame。如果需要第二个相关窗口,请使用JDialog之类的对话框


编辑
比如说

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键会激活它。