使用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'是**不是正确的方法来解决这个问题。**使事物处于静态状态,以便他们可以访问其他类将回来困扰你。 –