Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JPOppMenu中捕获用户对jradiobutton的选择?_Java_Swing_Actionlistener_Jpopupmenu_Jradiobutton - Fatal编程技术网

Java 如何在JPOppMenu中捕获用户对jradiobutton的选择?

Java 如何在JPOppMenu中捕获用户对jradiobutton的选择?,java,swing,actionlistener,jpopupmenu,jradiobutton,Java,Swing,Actionlistener,Jpopupmenu,Jradiobutton,我已经能够在我的框架和菜单项中显示一个弹出菜单,一组单选按钮可以用箭头键导航。当用户按Enter/Return时,弹出菜单不再可见,我假设可以确定选择了哪个按钮并分配操作 private static final JPopupMenu popupSyncTIR = new JPopupMenu(); popupSyncTIR.setLabel("Sensor Synced to Clock"); ButtonGroup grpTIR = new ButtonGroup()

我已经能够在我的框架和菜单项中显示一个弹出菜单,一组单选按钮可以用箭头键导航。当用户按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键之前选择了哪个单选按钮?

结果值仍存储在添加到弹出菜单的组件中

public class ChoicesPopupMenu exends JPopupMenu {

    JRadioButtonMenuItem rbAClock;
    JRadioButtonMenuItem rbBClock;
    JRadioButtonMenuItem rbCClock;

    // Construct the UI ...

    public boolean isAClockSelected() {
        return rbAClock.isSelected();
    }

    // Other selection checkers...

}
您需要实现一个到您的弹出窗口和监视器的弹出菜单将成为不可见的方法

调用时,您需要查询弹出菜单中所选组件的组件

如果在类上下文中仍然有对它们的直接引用,则可以直接访问它们

下一个最好的方法是对弹出菜单进行分类

public class ChoicesPopupMenu exends JPopupMenu {

    JRadioButtonMenuItem rbAClock;
    JRadioButtonMenuItem rbBClock;
    JRadioButtonMenuItem rbCClock;

    // Construct the UI ...

    public boolean isAClockSelected() {
        return rbAClock.isSelected();
    }

    // Other selection checkers...

}
或者,您也可以遍历JPOppMenu的组件层次结构


结果值仍存储在添加到弹出菜单的组件中

public class ChoicesPopupMenu exends JPopupMenu {

    JRadioButtonMenuItem rbAClock;
    JRadioButtonMenuItem rbBClock;
    JRadioButtonMenuItem rbCClock;

    // Construct the UI ...

    public boolean isAClockSelected() {
        return rbAClock.isSelected();
    }

    // Other selection checkers...

}
您需要实现一个到您的弹出窗口和监视器的弹出菜单将成为不可见的方法

调用时,您需要查询弹出菜单中所选组件的组件

如果在类上下文中仍然有对它们的直接引用,则可以直接访问它们

下一个最好的方法是对弹出菜单进行分类

public class ChoicesPopupMenu exends JPopupMenu {

    JRadioButtonMenuItem rbAClock;
    JRadioButtonMenuItem rbBClock;
    JRadioButtonMenuItem rbCClock;

    // Construct the UI ...

    public boolean isAClockSelected() {
        return rbAClock.isSelected();
    }

    // Other selection checkers...

}
或者,您也可以遍历JPOppMenu的组件层次结构


与不在菜单中的单选按钮相同:-使用操作:

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

与不在菜单中的单选按钮相同:-使用操作:

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

为了更快地得到更好的帮助,发布一条消息。为了更快地得到更好的帮助,发布一条消息。呃。。。不,不需要popupMenuListener。ehh。。。不,不需要popupMenuListener。愚蠢的问题抱歉,在mo的pc前的机器人操作事件是否会导致弹出窗口关闭?没有理由问其他人他们好奇API中没有实现鼠标或键盘事件,弹出窗口总是从Java1.4关闭,没有添加侦听器。谢谢,我现在第一次在Java中使用了单选按钮。我对Java有点陌生。。。我现在需要做的就是添加一个取消按钮。愚蠢的问题对不起,在mo的pc前的机器人会不会导致弹出窗口关闭?没有理由问其他人他们好奇API中没有实现鼠标或键盘事件,弹出窗口总是从Java1.4关闭,没有添加侦听器。谢谢,我现在第一次在Java中使用了单选按钮。我对Java有点陌生。。。我现在需要做的就是添加一个取消按钮。