- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我自动生成一组 JMenuItem 并将它们添加到每个右键单击事件的 JPopUpMenu 中。问题是当我在所选菜单上按回车键时,我为菜单项设置的操作没有运行。我可以使用向上/向下键在菜单上导航,但是,该操作只能通过鼠标单击来运行。
下面是创建菜单项的代码:
private JMenuItem createMenuItem(TaskFactory tf, String title, boolean useCheckBoxMenuItem, String toolTipText) {
enter code hereJMenuItem item;
PopupAction action = new PopupAction(tf, title);
if ( useCheckBoxMenuItem )
item = new JCheckBoxMenuItem(action);
else
item = new JMenuItem(action);
item.setEnabled(tf.isReady());
item.setToolTipText(toolTipText);
return item;
}
private class PopupAction extends AbstractAction {
TaskFactory tf;
PopupAction(TaskFactory tf, String title) {
super( title );
this.tf = tf;
}
public void actionPerformed(ActionEvent ae) {
m_view.manager.execute(tf.createTaskIterator());
}
}
我试过将 focusable 设置为 true,但没有用。我已经在 Mac 10.7 Java 版本 1.6.0_33 和 Ubuntu Java 版本 1.6.0_26 上尝试过。我使用了标准的 Swing 外观和感觉。在 Mac 上运行时:外观是 [Aqua Look and Feel for Mac OS X - com.apple.laf.AquaLookAndFeel]
最佳答案
Windows XP,JDK6_025,使用 Substance、Metal、Windows、Nimbus
编辑1
关于 enter按下键或鼠标被触发 isEnabled
编辑2
添加了MenuKeyListener
,
注意!!!!
不要使用 MenuKeyListener
作为 tab 捕捉另一个 KeyEvents
(空格)和 enter是,否则有时会生成虚假结果,例如Unknown keyCode: 0x0 on ......
。
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.MenuKeyEvent;
import javax.swing.event.MenuKeyListener;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import javax.swing.table.*;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.skin.BusinessBlueSteelSkin;
public class TableCheckBox extends JFrame {
private static final long serialVersionUID = 1L;
private JTable table;
public TableCheckBox() {
Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"};
Object[][] data = {
{"Buy", "IBM", new Integer(1000), new Double(80.50), false},
{"Sell", "MicroSoft", new Integer(2000), new Double(6.25), true},
{"Sell", "Apple", new Integer(3000), new Double(7.35), true},
{"Buy", "Nortel", new Integer(4000), new Double(20.00), false}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
table = new JTable(model) {
private static final long serialVersionUID = 1L;
@Override
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
createPopupMenu();
}
private void createPopupMenu() {
MyMenuKeyListener myMenuKeyListener = new MyMenuKeyListener();
JPopupMenu popup = new JPopupMenu();
JMenuItem myMenuItem1 = new JMenuItem("cccccccccccccccccccccc");
myMenuItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//System.out.println("Done myMenuItem1");
}
});
myMenuItem1.getModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel model = (ButtonModel) e.getSource();
if (model.isArmed()) {
//System.out.println("isArmed");
} else if (model.isEnabled()) {
//System.out.println("isEnabled");
} else if (model.isPressed()) {
//System.out.println("isPressed");
} else if (model.isRollover()) {
//System.out.println("isRollover");
} else if (model.isSelected()) {
//System.out.println("isSelected");
}
}
});
myMenuItem1.addMenuKeyListener(myMenuKeyListener);
JMenuItem myMenuItem2 = new JMenuItem("bbbbbbbbbbbbbbbbbbbbbb");
myMenuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//System.out.println("Done myMenuItem2");
}
});
myMenuItem2.getModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel model = (ButtonModel) e.getSource();
if (model.isArmed()) {
//System.out.println("isArmed");
} else if (model.isEnabled()) {
//System.out.println("isEnabled");
} else if (model.isPressed()) {
//System.out.println("isPressed");
} else if (model.isRollover()) {
//System.out.println("isRollover");
} else if (model.isSelected()) {
//System.out.println("isSelected");
}
}
});
myMenuItem2.addMenuKeyListener(myMenuKeyListener);
popup.add(myMenuItem1);
popup.add(myMenuItem2);
MouseListener popupListener = new PopupListener(popup);
table.addMouseListener(popupListener);
popup.setLightWeightPopupEnabled(false);
PopupMenuListener popupMenuListener = new MyPopupMenuListener();
popup.addPopupMenuListener(popupMenuListener);
}
private class PopupListener extends MouseAdapter {
private JPopupMenu popup;
PopupListener(JPopupMenu popupMenu) {
popup = popupMenu;
}
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
if (table.getSelectedRow() != -1) {
maybeShowPopup(e);
}
}
private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
}
private class MyMenuKeyListener implements MenuKeyListener {
public void menuKeyTyped(MenuKeyEvent e) {
MenuElement[] path = e.getPath();
JMenuItem item = (JMenuItem) path[path.length - 1];
System.out.println("Key typed: " + e.getKeyChar()
+ ", " + MenuKeyEvent.getKeyText(e.getKeyCode())
+ " on " + item.getText());
}
public void menuKeyPressed(MenuKeyEvent e) {
MenuElement[] path = e.getPath();
JMenuItem item = (JMenuItem) path[path.length - 1];
System.out.println("Key typed: " + e.getKeyChar()
+ ", " + MenuKeyEvent.getKeyText(e.getKeyCode())
+ " on " + item.getText());
}
public void menuKeyReleased(MenuKeyEvent e) {
MenuElement[] path = e.getPath();
JMenuItem item = (JMenuItem) path[path.length - 1];
System.out.println("Key typed: " + e.getKeyChar()
+ ", " + MenuKeyEvent.getKeyText(e.getKeyCode())
+ " on " + item.getText());
}
}
private class MyPopupMenuListener implements PopupMenuListener {
public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) {
//System.out.println("Canceled");
}
public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) {
//System.out.println("Becoming Invisible");
}
public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) {
//System.out.println("Becoming Visible");
}
}
public static void main(String[] args) {
/*SwingUtilities.invokeLater(new Runnable() {
public void run() {
SubstanceLookAndFeel.setSkin(new BusinessBlueSteelSkin());
}
});*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
/*UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());*/
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TableCheckBox frame = new TableCheckBox();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocation(150, 150);
frame.setVisible(true);
}
});
}
}
关于java - JMenuItem 没有被键盘回车键激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162666/
我有这个代码: JMenuItem itemA; JMenuItem itemB; JMenuItem itemC; JMenuItem[] items = {itemA, itemB, itemC}
如何防止 JMenuItem 在单击 JMenuItem 时关闭菜单? JMenuItem 已启用。 这就是场景,我有 3 个 JMenuItems: JMenuItem: A, B, C; C 显示
我有一个 JPopupMenu 并在其中插入一些 JMenuItems。我需要的是一个看起来与普通母鹿相同但不可单击的 JMenuItem。 我尝试过: JPopupMenu popmen = new
我有一个 JMenu,其中填充有来自具有监听器的数据库中的 JMenuItems,其中之一是从数据库中删除条目(如果选择)。发生这种情况时,JMenuItem 应该从菜单中消失。这是一个简短的例子 f
我正在尝试在 JMenuBar 上创建一个帮助按钮。目前我可以使用这个使其向右对齐 helpItem.setComponentOrientation(ComponentOrientation.RIGH
我正在尝试通过单击文件菜单栏中的菜单项来加载特定文件 (C://myfile.txt),我需要帮助来完成代码的操作部分 JMenuBar menuBar = new JMenuBar(); JMenu
是否可以创建一个包含复选框列表的自定义 JMenuItem?示例是 Excel 过滤器弹出菜单: 到目前为止,我所做的是这样的: JPopupMenu headerPopup = new JPopup
此代码将用户最喜欢的歌曲从 ArrayMap 添加到 JmenuItem public void actionPerformed(ActionEvent evt) { Stri
如何将 JMenuItem (newItem) 添加到 JMenu (menuUsers)?是否有合适的 ActionListener 用于此目的?有一部分代码执行将菜单项添加到菜单的操作。它在引发某
我的 inv 终于可以工作了! :D 但是,你知道...现在...这很愚蠢。我希望它在我右键单击时显示“使用项目 1”或其他内容,所以我这样做: if (actItemx == "It
我有一个带有 JMenuBar 的框架。当我按下 JMenuItems 之一时,我想向框架添加一个 JLabel ,但它不起作用。我不明白……这是同一个类(class)的。 public class
JMenuItem 具有以下构造函数:(来源: GrepCode ) public JMenuItem(Action a) { this(); setAction(a); } 但是,当
我创建了一个带有颜色的 3x3 内存游戏。程序运行并显示颜色,但 JMenuBar 无法正常工作。新棋盘、游戏和结束游戏按钮不起作用。我的 Actionlistener 有问题吗? 这就是代码应该如何
我将菜单添加到工具栏,如下所示: JMenuBar menu = new JMenuBar(); JMenu actions = new JMenu("Aktionen");
我想为颜色列表添加每个菜单项行,但有类似的错误 "at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)" 在我的
所以我必须在 Swing 中为我的 Java 类创建一个简单的 GUI,我偶然发现了这个小的装饰性问题。 我有以下代码: JMenuItem mntmQuit = new JMenuItem(
我试图添加一些菜单,想知道如何在第二个 menuItem 之后添加边框 就这样 Image Here 这是我的代码 jmb = new JMenuBar(); jmb.setPreferredSize
我想为 JMenuItem 设置快捷键。 我现在是这样设置的 openFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionE
我自动生成一组 JMenuItem 并将它们添加到每个右键单击事件的 JPopUpMenu 中。问题是当我在所选菜单上按回车键时,我为菜单项设置的操作没有运行。我可以使用向上/向下键在菜单上导航,但是
我有一个带有标准项和快捷方式的 JMenuBar。但是我注意到快捷方式描述是左对齐的,看起来很难看。有办法右对齐吗? PS:“Umschalt”表示转变。有没有办法强制它说 shift 而不是 Ums
我是一名优秀的程序员,十分优秀!