繁体   English   中英

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

[英]Saving Data on a new JTable (new JFrame) using NetBeans GUI builder

我对Java非常陌生,这就是为什么我使用NetBeans GUI构建器的原因,基本上我已经创建了一个具有两个组件的JFrame,并且我能够保存两个文本字段的数据并使用一个提交按钮来放置它到JFrame中的JTable中。 但是我专门创建了一个新的JFrame来容纳JTable。 因此,一个JFrame具有两个文本字段和一个Submit按钮,另一个JFrame作为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,它将是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接口(这些是Observer需要实现的所有方法)

public interface Observer {

    public void update(String[] row);
}

让我们定义将成为观察者的Frame2

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);
            }
        });
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM