问题标签 [abstract-action]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
140 浏览

java - 将动作组合为多个较小动作的序列的正确方法?

我定义了三个动作,如下所示:

现在我想定义一个按顺序执行这三个动作的巨型动作。我确信有比执行以下操作更好的方法:

我只是不知道更好的方法是什么。有人可以指点我吗?


要按照答案中的建议添加更多上下文,我的应用程序有一些 UI 元素(如节点和边),用户可以选择一堆节点并对它们执行 A、B、C 或 JumboAction。

0 投票
1 回答
452 浏览

java - 在 swing 中使用布尔变量而不是 ActionListner 接口

我有一个小问题,请让我解释一下这个场景。我有一个swing jframe,其中我有一个名为“start”的按钮,它在几秒钟内启动计时器,所以每当我点击开始时,它会将按钮本身转换为“reset”,这应该使秒数为零,并且应该再次将自身转换为“开始”。我担心这两种情况我必须运行两组代码,我使用了两个实现 ActionListener 接口的类有没有办法将这两组代码包含在实现 ActionListener 的同一个类中,并切换代码块取决于一个布尔变量,该变量会随着按钮的变化而改变其值。

我试过了,但我遇到了性能问题,比如冻结应用程序,甚至不能完全按预期工作。

请在下面查看我的代码。

0 投票
1 回答
130 浏览

java - 动作类中的 KeyListener 使用 setAction() 时未听到

对于如何使以下工作正常工作,我将不胜感激。

最初我所有的动作都被塞进了 GUI。然后随着项目的进展,GUI 变得相当大。所以我一直在将所有这些动作转移到它们自己的类中。在这样做时,某些方面会失去其可见性。我希望能捕捉到所有可见性问题,这一点我很确定。

现在的问题。

在JButton上实现setAction()调用允许操作工作,并且如果它只是一个MouseListenerMouseMotionListener则它工作得很好。但是,未达到KeyListener代码。您会注意到//Debug Lines

下面的代码 #1 - GUI 类中的代码

下面的代码 #2 - RotateAction 类中的代码

注意: 我有其他操作在我将 KeyListener 留在 GUI 中而不是将其带入操作中。

那么为什么 MouseListeners 可以正常工作而 KeyListeners 不能正常工作呢?

0 投票
2 回答
1682 浏览

java - 从按钮/鼠标释放调用 Java AbstractAction

在一个简单的计算器应用程序中,我使用抽象操作来处理用鼠标单击的按钮和按下的相应数字键盘键(带有键绑定)。我希望在使用键盘时发生某些外观变化,例如当我按下数字 1 键时更改 JButton 数字 1 的边框。并在发布时将其更改回来。这一切都有效。然后我又开始用鼠标按下 JButtons 并意识到释放键的动作永远不会被调用,显然是因为我没有使用键绑定。所以我的问题是,有没有办法在鼠标释放/按钮抬起时调用适当的释放抽象动作?

当我发现这一点时,我最初尝试了这个:

所以无论是按键还是鼠标,它都会改变。但是它不会改变,或者可能会变得如此之快以至于无法检测到。

在这种情况下注册鼠标侦听器是没有意义的。无论如何我都试过了,我似乎无法将抽象动作注册为鼠标监听器。

感谢您的意见和想法。

我注册了actionlistener:

*Action 是抽象动作

我用它来键盘输入

我使用Number操作来更改相应 jbutton 的边框。然后我使用Number Released再次更改边框。

显然,当我用鼠标单击时,边框会突出显示。但是释放的数字不会调用。就像我说的那样,将释放的方面全部消除,并将第一个边界更改放在抽象动作的开始,然后在抽象动作结束时进行最后的边界更改,显然速度如此之快,以至于你看不到边界的变化。

0 投票
1 回答
1207 浏览

java - 触发 Java GUI 更新

对此可能有更好的问题/答案,但我一直在寻找的东西还没有解决,而且我在为谷歌查询提出问题时遇到了麻烦。基本上,我有一个 JFrame,其中包含几个面板和组件,它们从 xml 文件中提取数据。我使用 JFrame 的实例变量private Date focusDate = new Date();来存储我希望每个面板显示哪一天的信息,到目前为止一切都很好。

现在我的问题来了,我正在尝试设置导航组件的各种操作以在更改“focusDate”后进行更新。我在 JPanel 中有一个工具栏,NavButtons navPanel = new NavButtons(focusDate);我将其设置为内部类,并且控制台报告正在更改,但是当我调用我的方法时我focusDate无法获取 JFrame 。validate(), repaint(), etc...setFocus(Date d)

如果有帮助,我可以包含更多我的代码,但这是有问题的方法:

以下是我在构造函数中设置 ActionListener 的方式:

我对摇摆不是很熟悉,所以我敢肯定这是我没有得到的一些小细节,但是如果有人可以解释如何重新触发参数传递并将框架的子组件更新为业余爱好者将不胜感激。

更新 这是整个 JFrame

正如@MadProgrammer 指出的那样,我应该将日期存储在一个单独的对象中(如图所示):

我这样编辑了框架:

仍然没有做正确的事情......

0 投票
1 回答
361 浏览

java - MVC模型中AbstractAction的实现

我正在开发一个MVC Java Swing应用程序,它将为用户提供至少十几种不同的操作。其中一些操作将触发SwingWorker对象的执行,而其他操作则非常简单(或常见)。我从这里讨论的方法开始,但为了避免AbstractAction为任何“常见”操作定义类的实现,我对其进行了修改。这是我实施的解决方案:

Action枚举类定义了我的“常见”操作:

然后,在Controller类中,我添加了这个方法:

}

所以我得到如下的动作(在控制器中)并将它们分配给目标 Swing 组件:

whereComplexAction是 的完整实现AbstractAction,这只是枚举类中未列出的操作的管理示例(因为它不是“常见”操作),但值得自定义完整实现。

最后,模型中的“通用”executeAction方法负责将动作分派给特定的子模型类:

getModelInstance给定枚举中列出的模型类名的情况下,只需从模型工厂检索目标子模型对象的实例。

一切正常,但我不相信这种模式:这不是样板代码吗?是否有一些 J2EE 对象通过编写更少的代码来实现相同的结果?我觉得这是一个非常常见的模式,我觉得奇怪的是没有更好的方法来使用AbstractAction.

0 投票
1 回答
4047 浏览

java - ActionListener 与 AbstractAction

我正在尝试了解有关事件处理的更多信息,但在我读到的任何地方,它主要是关于如何使用它,所以会发生一些事情,而不是它是如何工作的。

到目前为止,我知道单击按钮时发生某些事情的两种方法。

动作监听器:

和抽象动作:

我知道我可以将我想要发生的所有事情写进actionPerfomed()方法中。

但是由于我不知道,在后台到底发生了什么,我不知道一个人是否比另一个人更有优势,或者我应该在哪种情况下使用哪个?

0 投票
1 回答
735 浏览

java - 如何使用 java.awt 支持 ctrl + shift + 数字键盘键

我想将ctrl++shiftnumpad 7动作图相关联。基本上,我试图将我的操作绑定到键盘快捷键,并希望与从顶部按下的数字键或从正确的键盘数字按下的数字键具有相同的行为。

我可以映射

但无法映射

这是我要执行的代码:

请帮忙。

0 投票
1 回答
472 浏览

java - 为什么我不能使用 setEnabled(false) 禁用工具栏按钮(操作)

我有工具栏按钮,我试图通过使用 action.setEnabled(false) 来禁用它,但是当我这样做时,我收到以下错误:

调用此代码后会发生这种情况:

但是当我在 actionPerform 方法中执行此操作时,它不会显示错误:

在事件线程之外启用/禁用操作的正确方法是什么?

更新:

我什至创建了自己的动作事件,我尝试在 actionPerformed 中使用 setEnable 而不是这样的事件,它仍然显示相同的错误

…………

0 投票
1 回答
30 浏览

java - 可以在 AbstractAction 类中使用paintComponent() 吗?

我正在尝试制作一个创建 JPanel 的程序,当用户按下 W、A、S 和 D 时,绘制的立方体将在窗口中导航(每次按下某个键时都会导航一定量),我创建了 MoveCubeUp 类,并在调用它时重写了其中的paintComponent 方法以重新绘制立方体,但它不起作用。有人可以解释为什么吗?

如果格式不正确,我深表歉意。第一篇文章:/paint 方法是否需要在扩展 JFrame 的类中定义,如果是,我如何将它与 abstractAction 类一起使用(或者我怎样才能完全避免 AbstractAction 类)?