栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

更新更改到另一个类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

更新更改到另一个类

有没有一种方法可以“告诉” JPanel排序中发生的事情?

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

repaint()
以重新绘制列表中元素的当前位置。


但是,更优雅的方法是通过在与执行排序的类之间建立契约来使用 Observer模式

DrawingPanel

DrawingPanel
,是否可以implements观察员接口,而
SortAlgorightm
类实现可观察到的接口。

您可以在

DrawingPanel
每次交换2个元素时让通知
sorting class


Observer Pattern中 ,您将具有以下接口:

public interface Observer{    public void update(ArrayList<Integer> 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<Integer> 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<Observer> 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

如果只有1个

observer
,您甚至不需要保留一个清单
Observers
。在我的示例中,您始终可以调整次要细节。


如果不希望在交换2个元素时更新GUI,则始终可以将GUI移动

notifyObservers();
到要更新的其他位置。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516273.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号