gpt4 book ai didi

java - 基本 Java 问题,更新 GUI 的类

转载 作者:行者123 更新时间:2023-12-02 00:54:04 25 4
gpt4 key购买 nike

我将尝试用示例来说明我的问题,我正在尝试创建一个 Java 程序(最终)包含一个复杂的 Swing GUI。

我有Main.java

public class Main extends JFrame implements ActionListener {

JTextArea example;

public Main()
{

//... Missing, basic swing code
example = new JTextArea();
//... example added to jpanel, jpanel added to jframe, jframe set visible etc.


}

public void actionPerformed(ActionEvent e) {


if(e.getActionCommand().equalsIgnoreCase("Do Something!"))
{
new DoSomething();
}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Main();
}
});

}

}

现在,我希望我的 DoSomething() 类更新我的示例 JTextArea,执行此操作的最佳方法是什么?

我可以将对 example 的引用传递给 DoSomething(),因此 DoSomething(example),但这看起来不太好。我还可以将“this”传递给 DoSomething() 并在 Main 中实现 updateExample(String newString) 方法,但这似乎也不太好。

基本上,实现我想做的事情的最佳方法是什么?我正在编写的程序最终会变得比这复杂得多,而且我看不到一种方法可以让我在不变得太困惑的情况下做到这一点。

最佳答案

您似乎正在寻找 Observer pattern

我用你的话总结了一个小例子

import java.util.Observable;
import java.util.Observer;


public class Main implements Observer {
private DoSomething businessClass;

public Main() {
businessClass = new DoSomething();
businessClass.addObserver(this);
}

public static void main(String[] args) {
Main main = new Main();
}

@Override
public void update(Observable obs, Object obj) {
// Do whatever you want to do with textarea or other UI components
}
}

class DoSomething extends Observable {
public DoSomething() {
Object result = new Object(); // It can be any type not just an object
// After finish...
setChanged();
notifyObservers(result);
}
}

通过使用这个小模式,UI 可以始终了解 DoSomething 类的状态,并且该类只需要调用 notifyObservers 方法。因此,您的系统在保持健壮的同时保持解耦

关于java - 基本 Java 问题,更新 GUI 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com