- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ActionMap 和 InputMap 为我的 JFrame 创建快捷方式。但是还是做不了这个工作。我用 AbstractAction 创建了 ActionMap 来创建 Action ,在我创建了 InputMap 之后注册了事件,但是不起作用
private void acoesTela(){
JPanel painel = (JPanel)this.getContentPane();
ActionMap actionMap = painel.getActionMap();
actionMap.put("consultaProdutos", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent evt) {
System.out.println("F3 is pressed");
}
});
/** registra acoes */
InputMap imap = painel.getInputMap(JPanel.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0), "consultaProdutos");
}
最佳答案
发布的代码看起来很合理,但我们不知道代码的使用上下文。例如,您是否将任何组件添加到内容 Pane 并且它们是否具有焦点。发布问题时发布 SSCCE这说明了问题,我们不必猜测您真正在做什么。
在框架级别处理 Action 时,我通常将键绑定(bind)添加到框架的 JRootPane
。下面是演示此方法的 SSCCE
:
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
/**
** This class will close a JDialog (or a window) when the Escape key is used.
** However, first it must check to see if a popup component is visible in
** which case the Escape key will close the popup normally, then you must use
** the Escape key a second time to close the dialog.
*/
public class EscapeAction extends AbstractAction
{
public void actionPerformed(ActionEvent e)
{
boolean visiblePopup = false;
Component c = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
// Check if light weight popup is being used
List<JPopupMenu> popups = SwingUtils.getDescendantsOfType(JPopupMenu.class, (Container)c, true);
for (JPopupMenu p: popups)
{
p.setVisible( false );
visiblePopup = true;
}
// Check if a heavy weight popup is being used
Window window = SwingUtilities.windowForComponent(c);
for (Window ownedWindow: window.getOwnedWindows())
{
if (ownedWindow.isVisible())
{
Component rootPane = ownedWindow.getComponent(0);
List<JPopupMenu> ownedPopups =
SwingUtils.getDescendantsOfType(JPopupMenu.class, (Container)rootPane, true);
for (JPopupMenu ownedPopup: ownedPopups)
{
ownedPopup.setVisible( false );
visiblePopup = true;
ownedWindow.dispose();
}
}
}
// No popups so close the Window
if (! visiblePopup)
//SwingUtilities.windowForComponent(c).setVisible(false);
SwingUtilities.windowForComponent(c).dispose();
}
public static void main(String[] args)
{
String laf = null;
laf = "javax.swing.plaf.metal.MetalLookAndFeel";
// laf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
// laf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
try { UIManager.setLookAndFeel(laf); }
catch (Exception e2) { System.out.println(e2); }
JDialog dialog = new DialogEscape();
JPopupMenu popup = new JPopupMenu();
popup.add( new JMenuItem("SubMenuA") );
popup.add( new JMenuItem("SubMenuB") );
popup.add( new JMenuItem("SubMenuC") );
popup.add( new JMenuItem("SubMenuD") );
String[] items = { "Select Item", "Color", "Shape", "Fruit" };
JComboBox<String> comboBox = new JComboBox<String>( items );
dialog.add(comboBox, BorderLayout.NORTH);
JTextField textField = new JTextField("Right Click For Popup");
textField.setComponentPopupMenu(popup);
dialog.add(textField);
dialog.setDefaultCloseOperation( JDialog.DISPOSE_ON_CLOSE );
dialog.setSize(200, 200);
dialog.setLocationRelativeTo(null);
dialog.setVisible( true );
// Add the Key Bindings to the JRootPane for the EscapeAction
JRootPane rootPane = dialog.getRootPane();
String escapeText = "ESCAPE";
KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(escapeText);
rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke, escapeText);
rootPane.getActionMap().put(escapeText, new EscapeAction());
}
}
编辑:
此示例还需要 Swing Utils类。
关于java - 使用 ActionMap 的 JFrame 键盘快捷键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24724883/
我的代码有问题。我尝试做蛇游戏,但我停在了绘制面板的 Action map 的连续移动上。我尝试在循环中使用drawPanel.repaint,但它仅在到达末尾时向我显示,但我希望所有运动都在Acti
我终于完全切换到 JavaFX。 我非常热衷于按键功能。 是否有与您在 Swing 中找到的(非常好的)热键架构等效的热键架构?对于 JavaFX 文本控制对象,它是如何工作的?我想如果我看一下jav
我正在学习 Swing 并正在阅读有关 InputMap 和 ActionMap 的内容。 O'Reilly 关于 Swing 的书说 ActionMap 的键可以是任何 Object,但按照惯例是
我之前看过一篇帖子,建议优先使用 Actions 而不是 listeners。我对 ActionMap 不是很熟悉。每种方法的缺点是什么?我喜欢制作实现监听器的内部类。这是一种不好的做法吗? 谢谢 最
我不太清楚@RequestMapping、@ActionMapping和@RenderMapping之间的区别。似乎以上所有内容最终都将请求 url 映射到 Controller 中的实际方法。那么区
我需要从actionMapping调用确定的renderMapping方法代码: @ActionMapping(value = "update") public String update(A
我有一个Action SampleAction a = new SampleAction("foo", null); 然后我将它添加到一个 Button 和一个 ActionMap JButton b
我正在尝试让 ImageIcon PNG 图像在 Java 中的 GUI 上移动。但我收到此错误: MainClass.java:31: error: expected
谁能解释一下,应该如何正确映射 POST 请求? API文档中并不清楚。 value应该赋给action参数javax.portlet.action的值 @ActionMapping(value =
我正在使用 Liferay 和 Spring MVC,我想重定向到另一个 portlet 并向它传递一个参数,但是当我尝试设置渲染参数时,我得到了这个错误: 15:20:24,859 ERROR [p
通用代码... 出于某种原因,我的 JMenuItem 没有执行操作。 我做了一个框架,一个JMenuBar和一个JMenuItem,一切都在它应该在的地方。我可以很好地单击 JMenuItem,它会
如何从 @ActionMapping 处理程序方法重定向并避免后续自动/默认 @RenderMapping 调用? 为什么我(认为我)需要这个 我有 @ActionMapping 方法,它“做一些事情
我一直在阅读有关使用多个组件注册“Action”对象的文章,我发现了将 Action 对象注册(绑定(bind))到 Keystroke 的方法目的。 在追寻中我遇到了这段代码: InputMap i
目前我特别感兴趣的是 JTable 的“取消”操作...特别是我试图找出为什么在为 JTable 的 CellEditor 组件(JTextField)设置了 InputVerifier 后,IV 的
我正在尝试使用 ActionMap 和 InputMap 为我的 JFrame 创建快捷方式。但是还是做不了这个工作。我用 AbstractAction 创建了 ActionMap 来创建 Actio
我找不到关于所有这些之间关系的简明答案,所以我可以选择最佳实践并继续前进。 JTextComponent有: 旧的 addKeyListener(..)。我们编写一个 KeyListener,其中包含
我希望我的 JTextField 不仅在按下 ENTER 时处理文本,而且当按下空格键时。您可以在下面的代码中看到,我将通常与 ENTER 关联的操作关联到 SPACE,但我得到了一些意外行为(见下文
我尝试让对话框在按 ESC 时关闭,并在按 ENTER 时接受。所以我使用 Input/ActionMap 构建了一个父类(super class)“CloseableDialog”,如下所示:
我需要在 button2 获得焦点时以编程方式显示工具提示。 (我按 Tab 键是因为 initially focus at button1) JButton button =
我正在使用 Dialogflow 构建一个应用程序。用户回答一些问题,并可以稍后查看他们的答案。我的问题是构建服务器以返回用户之前的答案。 这是目前为止的代码,其中意图为 QUESTION_1 和 Q
我是一名优秀的程序员,十分优秀!