我是java的新手,我被困在这里…我要做的是将一个java文件中arraylist的更改更新为另一个文件中的JPanel。我正在对arraylist进行排序,因此无法手动完成。有什么办法可以让我“告诉”
JPanel痛楚吗?
我有进行排序(工作)的BubbleSort.java,有包含JPanel和JFrame类(用于显示未排序的直方图的工作)的Animation.java。
这是家庭作业,所以我不想在这里发布代码。但是,如果我的描述不起作用,我将其发布。
谢谢!
有没有一种方法可以“告诉” 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();
到要更新的其他位置。
问题内容: 我正在尝试结合2个jcombobox。1个组合框用于显示费用类别。第二个组合框正在从文本文件读取文件以显示产品类型。如果我更改第一个组合框,我希望第二个组合框将根据用户在第一个组合框中的选择进行更改。 我是否仍有可能从文本文件加载其他组合框?该子项将不是Arrays,而是与以前相同,因为它位于cboperson代码的底部。 编辑的代码: 问题答案: 例如
我必须在我的android活动中实现2个回收器视图,其中第一个回收器视图显示类别,第二个将显示来自所选类别的项目。我已经实现了第一个回收器视图。 现在,在RecycerView中单击一个项目时,我需要突出显示该视图,还需要显示该类别下的项目。当我单击另一个视图时,第一个视图高亮应该更改为单击并显示该类别中的项目的新视图。另外,当我谈到这个活动时,第一个项目应该在第一个回收器视图中默认突出显示,相应
我想实现,让我们说温度单位转换器。我想使用AndroidMVVM和数据绑定来做到这一点,但我不知道如何。我有一个片段,它由三个编辑文本字段组成:摄氏度,华氏度,开尔文。更改其中之一后,其余部分应自动更新。在没有数据绑定的情况下,我将 TextWatcher 设置为每个字段,并在 onTextChanged 中执行所有验证和转换逻辑,并设置其他字段的值。在之前文本更改中,我删除了其他字段的侦听器,并
问题内容: 我有一条语句需要写(用通用名称表示,因为这是为了工作)来更新表“ tUpd”中的列“ updCol”。tUpd还具有一个列“ linkCol”,该列存在于另一个表tOther中。tOther还有另一列“ idCol”。 我的问题是更新tUpd中行的updCol值,该值通过linkCol对应于具有给定idCol值的行。 我认为应该起作用的一种解决方案是: 但是,我担心这种方法会导致性能下
我想做一个应用程序,当我按下AddTask类中的save按钮时,文本输入中的文本将直接更新到Details类中的标签,但我所做的在那里不起作用…有谁能帮我一下吗?
我正在使用齐柏林飞艇0.6.2和火花2.0。 我尝试在循环中执行查询,但效果不是很好。 我需要循环一个数据帧的每一行,大约5000行,并执行一个查询,这将在另一个数据帧中增加一个值。 以下是我的尝试: 我试着从两个数据帧中提取一小部分,但仍然很慢。我觉得我做得不对。 知道如何快速更新数据帧吗?