gpt4 book ai didi

java - 通知 "remote"JComponent 有关更改

转载 作者:行者123 更新时间:2023-12-01 10:41:38 26 4
gpt4 key购买 nike

考虑 JPanel 的结构如下:

enter image description here

MainPanel 包含两个面板:AdminPanel 和ReportPanel。
AdminPanel包含SetupPanel,SetupPanel又包含LogoPanel。

我想通知ReportPanel有关LogoPanel中的某些更改。
为此,我在 ReportsPanel 中实现了属性更改监听器。我在 ReportsPanel 中还有一个对其自身的静态引用。
LogoPanel 使用此静态引用来调用监听器
这个解决方案有效,但对我来说似乎并不优雅。

我的问题:有没有更优雅的方法来做到这一点?

最佳答案

我制定的解决方案如下:
创建了一个简单的界面:

    public interface Follower {

public void changed(String property);
}


和一个 listener 类:

    public class LogoListener  {

/**
* A static reference to this.
*/
private static LogoListener listener;

/**
* Represents the objects to be notified by the listener.
*/
private static List<Follower> followers;

/**
* Create a simple listener to be used by one "notifying"
* object, and "followers" objects.
*
*/
private LogoListener() {
followers = new ArrayList<Follower>();
listener = this;
}

/**
* Method to be used by the "notifying" object, to
* notify followers.
*/
public void notifyFollowers() {

for(Follower follower : followers){
follower.changed("Logo changed");
}

System.out.println("Logo changed");

}

/**
* Get the listener instance, or create one if it does not exist.
*
* @return the listener
*
*/
public static LogoListener getListener() {

if(listener == null) {
listener = new LogoListener();
}
return listener;
}

/**
*
* @param follower
* <br>Not null.
* @throws
* <br>IllegalArgumentException if <code>follower</code> is null.
*/
public void addFollower(Follower follower) {

if(follower == null ) {
throw new
IllegalArgumentException("Follower should not be null");
}

followers.add(follower);
}

}


报告面板(“追随者”或监听对象)实现了 Follower 接口(interface),这意味着重写changed(String message)方法:

        /* (non-Javadoc)
* @see listener.Follower#changed(java.lang.String)
*/
@Override
public void changed(String msg ) {
//respond to change goes here
System.out.println(msg);

}


并通过以下方式注册为关注者:

            LogoListener.getListener()
.addFollower(this);


Logo 面板通过以下方式通知更改:

        LogoListener listener = LogoListener.getListener();
listener.notifyFollowers();


非常欢迎评论和反馈。

关于java - 通知 "remote"JComponent 有关更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34383090/

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