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