使用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);
}
});
}
}
要麼使這些標籤的靜態或表static..then只是得到像'frame1.textfield1。 getText()' – Madhan
併發布一些代碼 – Madhan
1)請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/q/9554636/418556)2)爲了更好地提供幫助, [MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/)(簡短的,獨立的,正確的示例)。 3)@Madhan建議''static'是**不是正確的方法來解決這個問題。**使事物處於靜態狀態,以便他們可以訪問其他類將回來困擾你。 –