2015-07-03 81 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); 
      } 
     }); 
    } 

}