2014-09-18 31 views
-1

我有兩個幀每個有1個文本字段,我想捕獲一個字符串的第一幀文本字段並將其傳遞到文本字段中的另一個幀,但將數據保存在全局變量類型字符串中。JTextField數據在不同的幀中,數據存儲在全局變量中?

(對不起,我的英語)

+1

讓你幀的公共 – 2014-09-18 16:09:13

+2

向我們展示你tryed什麼做... – CtrlAltDel 2014-09-18 16:12:56

+1

@HovercraftFullOfEels爲什麼? – 2014-09-18 16:16:58

回答

1

Java沒有「全局」變量,你會不會想用這個。相反,您會希望沿着M-V-C模型(模型視圖控制)構建代碼,並在模型中保存關鍵文本字符串。然後你可以有任何GUI窗口,你希望聽到模型的變化,然後他們可以做出相應的反應。

如果您只想讓兩個JTextField共享完全相同的文本,您可以做的另一件事是讓它們共享相同的模型 - Document for 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); 
    } 

} 

編輯2
如果你想同時JTextFields將共享相同的數據在用戶鍵入它,然後讓他們共享模型(JTextFields的文檔)。例如

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

我解決了問題。

////幀1(principio.java)發送///此幀發送內容

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 

    } 
} 

//代碼重複,但從來沒有刪除,給了他的第一個表單默認的內容(principio.java)

+0

您不應該在JTextField中使用KeyListener,因爲它會弄亂JTextField對文本的處理(通過鍵綁定)。最好將ActionListener添加到JTextField中,因爲按下回車鍵時會激活它。 – 2014-09-18 19:33:20

相關問題