java - 管理 JFrame 实例
问题描述
在我的项目中,我有一个实例jframe1
和两个jframe2
. 然后我想jframe1
txt2
从jframe2
. 但是当我调用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() {
}
解决方案
这是一个示例。该示例使用两个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);
}
}
推荐阅读
- javascript - 如何在反应中重定向到另一个组件并传递我在前一个组件中设置的状态?
- r - 如何计算不与R中其他多边形重叠的多边形面积?
- animation - NavigationView 导致动画错误?
- numpy - Numpy savetxt Structured Array ValueError: fmt has wrong number of % formats
- sql - 如何在 SQL Server 中将多行与 JSON PATH 结合起来?
- python - 当需要对象作为关键字参数但需要传递字典值时如何使用字典?
- bash - bash 标志设置的变量不能被其他命令使用
- python - 使用 PyQt5 运行 While 循环
- python - 停止 main() 函数自动启动
- python - 用 x 轴上的字符串平滑一条线(Python)