- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有多个 JTextArea
的 Java Swing 界面,并且我正在实现一个具有各种不同功能的“编辑”菜单,例如“查找”、“复制”、“粘贴”等。我点击 JMenuItem
我需要知道哪个 JTextArea
拥有焦点,这可以通过 TextAction
实现(我还没有沿着这条路线走下去FocusListener
并跟踪最后获得焦点的内容):
JMenuItem miFind = new JMenuItem(new EditHandler("Find"));
class EditHandler extends TextAction {
private String s = null;
public EditHandler(String vs) {
super(vs);
s = vs;
}
@Override
public void actionPerformed(ActionEvent e) {
JTextComponent c = getFocusedComponent();
if (s.equals("Find")) {
showFindDialog(c);
}
}
}
这工作得很好,但我希望能够在某些上下文下禁用“查找”JMenuItem
(即,如果特定的JTextArea
被禁用或为空。我可以在 JMenu
上实现 ActionListener
,但无法使用 getFocusedComponent()
来识别 JTextArea
的内容重点。
根据 Java 文档,JMenu
构造函数采用 Action
(如 JMenuItem
),我尝试了以下操作:
mEdit = new JMenu(new EditHandler("Edit"));
但是,尽管构造函数触发,但 actionPerformed()
事件并未在 JMenu
的 EditHandler
内触发。如果我能让它启动,那么我计划启用或禁用我的“查找”JMenuItem
。
最佳答案
最好的方法是使用文本组件的 Action 映射来放置相应的 Action 。在这种情况下,您可以对某些文本组件禁用它。
@Override
public void actionPerformed(ActionEvent e) {
JTextComponent c = getFocusedComponent();
if (s.equals("Find")) {
Action a = c.getActionMap().get("Find");
if (a.isEnabled()) {
// generate new event to modify the source (menu item -> text component)
ActionEvent ae = new ActionEvent(c, e.getID(), e.getCommand());
a.actionPerformed(ae);
}
}
}
对于每个文本组件,您必须提供一个操作并使用该组件的操作映射来注册它。
public class UniversalFindAction extends AbstractAction {
public void actionPerformed(ActionEvent ae) {
JTextComponent c = (JTextComponent) ae.getSource();
showFindDialog(c);
}
}
// registering of action
JTextComponent comp = new JTextArea();
comp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_DOWN_MASK), "Find");
comp.getActionMap().put("Find", new UniversalFindAction());
关于java - 使用 TextAction 实现带有 actionPerformed 的 JMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25864037/
我对这个错误有一些疑问: ProjectName.ViewController textAction:]: unrecognized selector sent to instance 0x7fa60
我有一个带有多个 JTextArea 的 Java Swing 界面,并且我正在实现一个具有各种不同功能的“编辑”菜单,例如“查找”、“复制”、“粘贴”等。我点击 JMenuItem 我需要知道哪个
我是一名优秀的程序员,十分优秀!