java更新类_java-将更改更新到另一个类

Is there a way I can “tell” the JPanel what’s going on in the sorting?

有很多方法可以做到这一点.最直接的方法是保留对当前未排序列表的引用,并在面板类中执行排序.每次从列表中交换2个元素时,调用repaint()即可重新绘制列表中元素的当前位置.

但是,更优雅的方法是通过在DrawingPanel和执行排序的类之间建立协定来使用Observer模式.

DrawingPanel可以实现Observer接口,而SortAlgorightm类则实现Observable接口.

每次在排序类中交换2个元素时,您都可以通知DrawingPanel.

在观察者模式中,您将具有以下接口:

public interface Observer

{

public void update(ArrayList list);

}

public interface Observable

{

public void register(Observer o);

public void unregister(Observer o);

public void notifyObservers();

}

在GUI和排序算法之间建立契约:

class DrawingPanel extends JPanel implements Observer{

//Other attributes and initializations not shown

@Override

public void update(ArrayList list){

this.list = list; //You can choose to receive element

//indexs which got swapped instead (this is up to you)

repaint(); //Repaint your current display when list is updated

}

//Register myself with the sorting algorithm class

public void registerWith(Observable ob){

if(ob != null)

ob.register(this);

}

}

在您的SortingAlgorithm类中,启用它以将更新发送给已经向该类注册了自己的所有观察者:

class SortingAlgorithm implements Observable{

private ArrayList observers; //keep a list of observers for notifying

//Other attributes and initializations not shown

@Override

public void register(Observer o){

observers.add(o);

}

@Override

public void unregister(Observer o){

observers.remove(o);

}

@Override

public void notifyObservers(){

for(Observer o : observers)

o.update(list); //Update all observers with your latest list updates

}

public void bubbleSort(){

//Your sorting happens here..

for(int i=0; i < n; i++){

for(int j=1; j < (n-i); j++){

if(intArray[j-1] > intArray[j]){

//swap the elements!

temp = intArray[j-1];

intArray[j-1] = intArray[j];

intArray[j] = temp;

//Notify GUI to update screen

notifyObservers();

}

}

}

}

}

有了以上内容,GUI就会在您需要的任何时候进行更新.在这种情况下,由于我们放置了notifyObservers(observers);在bubbleSort()中,尤其是在交换元素时,因此,仅在列表更改时才更新GUI.

即使您不在JPanel上显示GUI,而是在其他contentPanes上显示GUI,也可以应用相同的逻辑.只需让类处理UI来实现Observer并将其注册到SortingClass.

如果您只有一个观察者,则甚至不需要保留一个观察者列表.在我的示例中,您始终可以调整次要细节.

如果不希望在交换2个元素时更新GUI,则可以始终移动notifyObservers();.到要更新的其他位置.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值