我已经能够在框架和菜单项中显示一个弹出菜单,可以使用箭头键浏览一组单选按钮。当用户按下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

07-24 09:48
查看更多