我已经能够在框架和菜单项中显示一个弹出菜单,可以使用箭头键浏览一组单选按钮。当用户按下Enter / Return键时,弹出菜单将不再可见,并且我认为可以确定选择了哪个按钮并指定一个动作。
private static final JPopupMenu popupSyncTIR = new JPopupMenu();
popupSyncTIR.setLabel("Sensor Synced to Clock");
ButtonGroup grpTIR = new ButtonGroup();
JRadioButtonMenuItem rbTIRMenuItem;
rbTIRMenuItem = new JRadioButtonMenuItem("Sync TIR-A to clock");
rbTIRMenuItem.setFont(new Font("Dialog", Font.BOLD, 16));
grpTIR.add(rbTIRMenuItem);
popupSyncTIR.add(rbTIRMenuItem);
rbTIRMenuItem = new JRadioButtonMenuItem("Sync TIR-B to clock");
rbTIRMenuItem.setFont(new Font("Dialog", Font.BOLD, 16));
rbTIRMenuItem.setSelected(true);
grpTIR.add(rbTIRMenuItem);
popupSyncTIR.add(rbTIRMenuItem);
rbTIRMenuItem = new JRadioButtonMenuItem("Sync TIR-C to clock");
rbTIRMenuItem.setFont(new Font("Dialog", Font.BOLD, 16));
grpTIR.add(rbTIRMenuItem);
popupSyncTIR.add(rbTIRMenuItem);
我还为整个框架实现了键映射,如下所示:
/**
* alt-T period synch TIR sensor w/clock
*/
@SuppressWarnings("serial")
private static void registerSyncTIRAction() {
javax.swing.Action tirSync = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {
setTIRSensorSync();
}
};
KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_T,
java.awt.event.InputEvent.ALT_DOWN_MASK);
((JComponent) contentPanel).getActionMap().put("TirSync", tirSync);
((JComponent) contentPanel).getInputMap(
JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, "TirSync");
}
/**
* Show the TIR popup
*/
private static void setTIRSensorSync() {
popupSyncTIR.show(pnlTIR, 10, 10);
}
在用户按下Enter键之前,如何确定选择了哪个单选按钮?
最佳答案
就像使用菜单中没有的radioButtons一样:-)使用操作:
Action actionA = new AbstractAction("Synch A to clock") {
@Override
public void actionPerformed(ActionEvent e) {
// do stuff A
}
};
JRadioButtonMenuItem buttonA = new JRadioButtonMenuItem(actionA);
Action actionB = new AbstractAction("Synch B to clock") {
@Override
public void actionPerformed(ActionEvent e) {
// do stuff B
}
};
JRadioButtonMenuItem buttonB = new JRadioButtonItem(actionB);
ButtonGroup ... // add buttons to group
JPopupMenu ... // add buttons to menu