gpt4 book ai didi

java - 使用观察者模式移动标签(JavaFx)

转载 作者:行者123 更新时间:2023-12-01 14:59:22 24 4
gpt4 key购买 nike

我正在创建一个聊天程序,其中我的聊天人员是一个标签。当用户点击anchorpane时,标签可以在屏幕上移动,现在这里有两个senerios:

  1. 聊天者必须在本地移动。

  2. 客户端必须将此移动发送给所有其他连接的客户端。

如果对象正常工作,那么第二种情况就很简单了,目前我的 ChatPerson 对象如下所示:

 package GUI;


public class ChatPerson {

private String username;
private int x;
private int y;
// Brugerens ID i databasen
private int id;

public ChatPerson(String name){
this.username = name;
}

public String getUserName(){
return username;
}
public void setX(int x){
this.x = x;
}
public void setY(int y){
this.y = y;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}



}

我的问题是我将如何实现这种行为。我查找了观察者模式,但我发现很难在这种情况下让它发挥作用?

此外,JavaFx 是否有某种我可以在这里使用的实现?我看过 Observablelist,但我无法真正弄清楚这对我有什么帮助?

最佳答案

在这种情况下您可以使用观察者模式。我假设您在每个客户端上都有一个相关人员的列表。如果是这样,那么向其他人通知移动事件应该非常简单。只需让 ChatPerson 像这样可观察

public class ChatPerson {
//your props here :P...
private final List<MoveListener> listeners = new ArrayList<MoveListener>();

private void notifyListeners(MoveEvent e){
for(MoveListener l : listeners){
l.onMoveEvent(e);
}
}
public void addMoveListener(MoveListener l){
this.listeners.add(l);
}
public void removeMoveListener(MoveListener l){
this.listeners.remove(l);
}

//i would create a move method but you can do this on setX() and setY()
public void move(int x,int y){
this.x=x;
this.y=y;
this.notifyListeners(new MoveEvent(this,x,y));
}
//your other method...
}

现在介绍 MoveListener 接口(interface)。

public interface MoveListener{
public void onMoveEvent(MoveEvent e);
}

还有 MoveEvent。

public class MoveEvent{
public final ChatPerson source;//i could be more generic but you get the ideea
public final int currentX;
public final int currentY;
public MoveEvent(ChatPerson source, int x,int y){
this.source = source;
this.currentX = x;
this.currentY = y;
}
//you can make the fields private and getters ofc :P
}

现在,每当 ChatPerson 移动时,它都会以一种良好且通用的方式广播其位置,这取决于每个监听器响应此事件的内容。
在容器类(包含已连接人员列表的容器类)中,只需实现一个 MoveListener 并将其添加到当前的 ChatPerson 即可。
在此实现中,您可以迭代已连接人员的列表,并“通过线路”发送当前位置。如果没有更多有关您的应用程序如何实现的详细信息,我真的无法给出更好的答案。
希望这有帮助。

关于java - 使用观察者模式移动标签(JavaFx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897878/

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