使用NetBeans GUI构建器在新的JTable(新的JFrame)上保存数据



我对java非常陌生,这就是我使用NetBeans GUI构建器的原因,基本上我已经创建了一个JFrame,它有两个组件,我可以保存两个文本字段的数据,并使用提交按钮将其放入JFrame中的JTable中。但我已经创建了一个新的JFrame,专门用来容纳JTable。所以一个JFrame有两个文本字段和一个提交按钮,另一个JFframe是JTable。下面是我在一个JFrame中有JTable、按钮和两个文本字段时使用的代码。如何将数据保存到只包含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*/});
}

用Frame1中文本字段的值更新Frame2中的表的一种方法是使用观察者模式。Frame1将具有观察者列表,一旦可观察者(Frame1(插入或具有新值,则需要更新该列表。我将添加代码以更好地理解这一点。另外,请查看观察者模式。

让我们定义一个Observable接口(这些都是Observable需要实现的方法(

public interface Observable {
    public void addObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObserver(String[] row);
}

让我们定义Frame1,它将是可观察的

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接口(这些都是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);
            }
        });
    }
}

相关内容

  • 没有找到相关文章

最新更新