gpt4 book ai didi

java - 制作 JFrame 和 Observable 对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:32 27 4
gpt4 key购买 nike

我有一个类,比方说 MyJFrame,它代表我的应用程序的 GUI。它实现接口(interface) Observer 并覆盖方法 update

public class MyJFrame extends JFrame implements Observer{
...
public void update(Observable arg0, Object arg1){
...
}
}

现在我也想让我的 JFram 成为一个 Observable 对象,但我不能,因为它已经扩展了 JFrame 类。我试图在我的类中创建一个 Observable 类型的变量。

public class MyJFrame extends JFrame implements Observer{
Observable observable = new Observable();

这里的问题是,我可以将观察者添加到这个可观察字段,我也可以通知观察者,但我不能调用方法 setChanghed()(因为它被声明为 protected )必须在通知之前被调用。

你知道我可以实现它吗?

谢谢!!

最佳答案

我认为这里有很多人,包括我自己使用 Observer Design Pattern无需使用 Java 的正式 Observer/Observable 接口(interface)/类,并且有很多方法可以实现这一点,尤其是在 Swing 中。可能最灵活的是将 PropertyChangeSupportPropertyChangeListeners 一起使用,这就是 SwingWorkers 实现它的方式。另一种是使用非常基本的 ChangeListener 接口(interface)。

如果您需要更具体的帮助,请提供有关您的问题的更多详细信息,我们可能会提供建议。

编辑 1
这也解决了一个单独但重要的问题,该问题由您的程序描述提出:您的 GUI 类扩展 JFrame。这里的许多人(再次包括我自己)建议您应该避免这样做,除非您的代码改变了 JFrame 的内在行为——即您的类重写了 JFrame 的一个或多个方法。这是关于哪个更好的更大讨论中的一个小子讨论:通过继承或通过组合增强类。

例如:Prefer composition over inheritance?

编辑2
下一个未请求的建议:我尝试将我的 GUI 代码调整为创建 JPanel 而不是 JFrames。这样,如果我想将我的 GUI 显示为独立的 GUI,我只需动态创建一个 JFrame,将我的 gui 的 JPanel 放入 JFrame 的 contentPane 中,打包 JFrame 并显示它。如果我想将 gui 放入 JDialog、JApplet、JOptionPane 或使用容器、另一个 JPanel 的 CardLayout 中,我会执行相同的过程,...。这使我在使用图形用户界面方面具有极大的灵 active 。

关于java - 制作 JFrame 和 Observable 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968490/

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