首页 > 解决方案 > 管理 JFrame 实例

问题描述

在我的项目中,我有一个实例jframe1和两个jframe2. 然后我想jframe1 txt2jframe2. 但是当我调用perfomaction()方法时,它是更新jframe2.

public class Jframe1 extends Jframe {
    public jframe1() {
    Performedaction() {
       jframe2.txt2.setText("do it");
    }
}

public class jframe2 extends Jframe {
    public static JtextFiedl txt2;
    public jframe2() {
}

标签: javaswingjframe

解决方案


这是一个示例。该示例使用两个JFrame窗口,并且在单击一个 jframe 中的按钮时,第二个JLabel将更新。该示例使用 aJLabel而不是JTextField

该机制使用java.util.Observer接口和Observable类从一个窗口更新到另一个窗口。

示例代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class TwoFramesExample {
    public static void main(String [] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TwoFramesExample().start();
            }
        });
    }
    private void start() {
        Frame1 f1 = new Frame1();
        new Frame2(f1);
    }
}

class Frame1 implements Observer {
    private JLabel label;
    @Override // Observer interface's implemented method
    public void update(Observable o, Object data) { 
        label.setText((String) data); // displays new text in JLabel
    }
    Frame1() {  
        JFrame f1 = new JFrame("Frame-1");
        f1.getRootPane().setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));        
        label = new JLabel("Click button in frame-2...");
        label.setFont(new Font("Dialog", Font.PLAIN, 20));  
        f1.add(label);
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1.setSize(350, 150);
        f1.setLocation(200, 200);
        f1.setVisible(true);
    }
}

class Frame2 {
    private int clicks;
    Frame2(Frame1 f1) {
        // Create Observable and add Observer       
        final MessageObservable observable = new MessageObservable();
        observable.addObserver(f1);
        // Display frame
        JFrame f2 = new JFrame("Frame-2");      
        JButton button = new JButton("Press me");
        button.setFont(new Font("Dialog", Font.PLAIN, 20));
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String data = "button clicks in frame-2: [" + ++clicks + "]";
                observable.changeData(data);
            }
        });     
        f2.add(button);
        f2.setSize(250, 150);
        f2.setLocation(600, 200);
        f2.setVisible(true);
    }
}

class MessageObservable extends Observable {
    MessageObservable() {   
        super();
    }
    void changeData(Object data) {
        // the two methods of Observable class
        setChanged(); 
        notifyObservers(data);
    }
}

推荐阅读