2015-07-03 22 views
1

我對java很新,這就是爲什麼我使用NetBeans GUI構建器,基本上我創建了一個包含兩個組件的JFrame,能夠保存兩個文本字段的數據並使用提交按鈕將它放入JFrame中的JTable中。但是我創建了一個專門用來容納JTable的新JFrame。所以一個JFrame有兩個文本字段和一個提交按鈕,另一個JFrame作爲JTable。下面是我在一個JFrame中使用JTable,按鈕和兩個文本字段時使用的代碼。如何試圖將數據保存到僅包含JTable的其他JFrame中?使用NetBeans GUI構建器將數據保存到新的JTable(新的JFrame)

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    DefaultTableModel model = (DefaultTableModel) table.getModel(); 
    model.addRow(new Object[]{/*some stuff here ignore for this question*/}); 
} 
+0

要麼使這些標籤的靜態或表static..then只是得到像'frame1.textfield1。 getText()' – Madhan

+0

併發布一些代碼 – Madhan

+0

1)請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/q/9554636/418556)2)爲了更好地提供幫助, [MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/)(簡短的,獨立的,正確的示例)。 3)@Madhan建議''static'是**不是正確的方法來解決這個問題。**使事物處於靜態狀態,以便他們可以訪問其他類將回來困擾你。 –

回答

0

使用Frame1中文本字段的值更新來自Frame2的表的一種方法是使用觀察者模式。 Frame1將有一個觀察者列表,在觀察者(Frame1)插入或具有新值時需要更新觀察者列表。我將添加代碼以更好地理解這一點。另外,看看觀察者模式。

讓我們來定義可觀察到的接口(這些是可觀察到的,需要實現所有方法)

public interface Observable { 

    public void addObserver(Observer o); 

    public void removeObserver(Observer o); 

    public void notifyObserver(String[] row); 
} 

讓我們來定義幀1,這將是Observervable

public class Frame1 extends javax.swing.JFrame implements Observable{ 

    private javax.swing.JTextField jTextField1; 
    private javax.swing.JTextField jTextField2; 
    private javax.swing.JButton submitButton; 


    private List<Observer> observers = new ArrayList<>(); 

    public Frame1() { 
     initComponents(); // 2 text fields and 1 button 
    } 

    private void initComponents() { 
     // I will skip this part you can generate it with NetBeans 
     // Basically initialise jTextField1, jTextField2, and submitButton 
    } 

    private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     String[] row = {jTextField1.getText(), jTextField2.getText()};   
     notifyObserver(row); 
    } 


    @Override 
    public void addObserver(Observer o) { 
     observers.add(o); // subscribe new observer 
    } 

    @Override 
    public void removeObserver(Observer o) { 
     observers.remove(o); // unsubscribe new observer 
    } 

    @Override 
    public void notifyObserver(String[] row) { 
     for (Observer observer: observers) { 
      observer.update(row); // notify all observers that new row values are available 
     } 
    } 
} 

而且,讓我們定義一個觀察接口(這些是Observer需要實現的所有方法)

public interface Observer { 

    public void update(String[] row); 
} 

讓我們定義式2,這將是觀察

public class Frame2 extends javax.swing.JFrame implements Observer { 

    private javax.swing.JTable jTable1; 

    public Frame2() { 
     initComponents(); 
    } 

    private void initComponents() { 
     // I will skip this part you can generate it with NetBeans 
     // Basically initialise jTable1 
    } 

    public void addRow(String column1, String column2){ 
     DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); 
     model.addRow(new Object[]{column1, column2}); 
    } 

    @Override 
    public void update(String[] row) { 
     addRow(row[0], row[1]); 
    } 
} 

現在,讓我們結束一切,並測試:

public class Main { 

    public static void main(String args[]) { 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       Frame2 frame2 = new Frame2(); 
       Frame1 frame1 = new Frame1(); 

       // Register frame2 as an observer of frame1 
       frame1.addObserver(frame2); 

       frame1.setVisible(true); 
       frame2.setVisible(true); 
      } 
     }); 
    } 

} 
相關問題