我的JButton ActionListener出现问题。我在另一个类中定义了doTheCleaning()方法,该类在调用时对我的GUI进行了一系列更改。
public void doTheCleaning(){
//change image icon
//had thread.sleep here
//insert to text area
//had thread.sleep here
//etc
}
然后在另一个类中,我实例化了包含doTheCleaning()方法的类,并用我的actionperformed()方法为我的jbutton编写了ActionListener,如下所示:
public void actionPerformed(ActionEvent e){
//some code
//newClass.doTheCleaning();
}
我知道如何做剩下的事情,例如addActionListener()和其他东西,因此无需对此进行质疑。我担心的是,调用doTheCleaning()方法时在GUI中所做的所有更改仅在单击按钮后才适用。发生这种情况时,不会显示在我的标签和文本区域中发生的更改之间的连续性。如果我直接在测试器类中调用该代码,则该代码运行良好,但在actionperformed方法内部调用该代码仅显示GUI的最终状态。我需要显示首先更改哪个元素,然后显示下一步,依此类推。
当我仅在单击JButton时才需要进行这些更改时,如何实现?
**我还不太擅长在Java中使用GUI。我希望你们能理解我的观点,而无需我给出代码。但如有必要,我可以。谢谢。
不要在EDT中执行任何密集的操作,否则GUI将无响应,并且您可能看不到GUI更新。您可以使用的最佳选择是SwingWorker
:
重写doInBackground()
,并将任何长时间的操作放入此方法内,以便它将在单独的线程而不是EDT上运行。
对于任何GUI创建或其中GUI组件的状态更改doInBackground()
,请使用publish(V... chunks)
将数据发送到process(List<V> chunks)
。您需要覆盖process(List<V> chunks)
。另请注意,它process(List<V> chunks)
是在EDT上执行的。
后doInBackground()
返回时,done()
执行上EDT,你可以重写它使用它的任何GUI更新。您还可以检索返回的值doInBackground()
使用get()
。
请注意,这SwingWorker<T,V>
是通用的,您需要指定类型。T
从返回的对象的类型doInBackground()
和get()
,而V
是你传递到元素的类型process(List<V> chunks)
通过publish(V... chunks)
。
execute()
方法首先调用Swing工人doInBackground()
。
有关更多信息,请阅读Swing中的并发。
我的JButton ActionListener有问题。我在另一个类中定义了一个doTheCleaning()方法,当调用该方法时,会对GUI进行一系列更改。 然后,在另一个类中,我实例化了包含doTheCleaning()方法的类,并用jbutton的actionperformed()方法编写了ActionListener,如下所示: 我知道如何执行其他操作,比如addActionListene
问题内容: 我在NetBeans中设计了两个JFrame。 当我单击“规则”按钮(即放在JFrame1上)时,它将打开第二个JFrame(但JFrame2在JFrame1的窗口上打开,这是我不想要的)。在第二个JFrame中,有一个“关闭”按钮。但是,当我单击此按钮时,我希望打开JFrame1并且它也能正常工作,但是JFrame2实际上没有关闭,并且JFrame1出现在JFrame2上方。 简而言
问题内容: 我创建了一个扩展JDialog的类,其中有一些复选框和3个按钮:接受,取消和全选。 当用户单击全选时,应选中每个复选框,如果再次单击,则应取消选中每个复选框。效果很好,但我还希望按钮的文本在“全选”和“全选”之间切换。我在这里遇到了麻烦,因此当用户单击按钮并将文本更改为“取消全选”时,该按钮消失了。 我在这里将类简化为最简单的形式: 我看不出有什么问题。有什么帮助吗? 问题答案: 该按
我正在尝试做一些非常简单的事情,在点击按钮时更改文本。 我似乎无法使用它,有人能告诉我添加ActionListener的正确位置吗? 主要类别 atmGUI类 编辑: 这是产生的错误 类型new ActionListener(){}必须实现继承的抽象方法ActionListener.actionPerform(ActionEvent)
问题内容: 仅在真正更改数据的情况下,才有可能使用“更新后”触发器。我知道“新旧”。但是使用它们时,我只能比较列。例如“ NEW.count <> OLD.count”。 但我想要类似的东西:如果“ NEW <> OLD”,则运行触发器 一个例子: 关键是,有一个更新,但是 什么都没有改变 。但是无论如何,触发器都在运行。恕我直言,应该有一个没有的方法。 我知道我可以使用 如果现在b <> OLD
所以我的代码是: 我希望能够增加仅单击项目的