如何使用匿名 class 从 Jcombobox 数组中获取值

how to get a value from a Jcombobox array using a anonymous class

我有一个数组 Jradiobuttons.i 我正在尝试让 java 匿名 class 实现 ActionListener 所以当用户按下单选按钮时我可以做一些事情但是因为这是一个数组,我不能使用 while 循环给出数组索引,所以如何识别我是什么 Jradiobutton using.and 我想获取该单选按钮的文本并将其保存在另一个变量中...我该怎么做?

这是我目前所做的:

if(count!=0) {
   rs=pst.executeQuery();
   JRadioButton a []=new JRadioButton[count];                       
   jPanel3.setLayout(new GridLayout());
   int x=0;
   ButtonGroup bg=new ButtonGroup();

   while(rs.next()) {    
     a[x]=new JRadioButton(rs.getString("name"));
     bg.add(a[x]);
     jPanel3.add(a[x]); 
     a[x].setVisible(true);

     a[x].addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {      

            JOptionPane.showMessageDialog(null,a[x].getText()); //here i cant use this x...even though i make x global value of x always will be 6 becouse of while loop.

        }
     });                  
     x++;
   }                            
}      

如果我没理解错的话,你可以设置单选按钮的名称:

a[x]=new JRadioButton(rs.getString("name"));
a[x].setName(rs.getString("name"));

并且在 ActionPerformed 中你得到了动作的来源:

public void actionPerformed(ActionEvent e) {

if( e.getSource() instanceof JRadioButton){

  String selectedRadioName = ((JRadioButton) e.getSource()).getName();

  JOptionPane.showMessageDialog( null, selectedRadioName );

}

你可以...

为每个 JRadioButton 提供一个 ActionCommand,将通过 ActionEvent

提供
a[x]=new JRadioButton(rs.getString("name"));
a[x].setActionCommand(String.valueOf(x));
//...
a[x].addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            String cmd = e.getActionCommand();
            int value = Integer.parseInt(cmd);

            JOptionPane.showMessageDialog(null, a[value].getText());
        }
}); 

有关详细信息,请参阅 How to Use Buttons, Check Boxes, and Radio Buttons

你可以...

使用 Action API 将消息和操作包围在独立的工作单元中...

public class MessageAction extends AbstractAction {

    private String message;

    public MessageAction(String text, String message) {
        this.message = message;
        putValue(NAME, text);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, message);
    }

}

然后将它应用到您的按钮,例如...

a[x] = new JRadioButton(new MessageAction(rs.getString("name"), "Hello from " + x);

有关详细信息,请参阅 How to Use Actions