84

フォームにラジオ ボタンを含むスイング アプリケーションがあります。を持っていButtonGroupますが、利用可能なメソッドを見ると、選択した の名前を取得できないようですJRadioButton。これまでのところ、私が言えることは次のとおりです。

  • ButtonGroup から、を実行してgetSelection()を返すことができますButtonModel。そこから を実行できますが、getActionCommand常に機能するとは限りません。さまざまなテストを試しましたが、予測できない結果が得られました。

  • また、 からButtonGroup列挙を取得できますgetElements()。ただし、各ボタンをループして、それが選択されているかどうかを確認する必要があります。

どのボタンが選択されているかを簡単に確認する方法はありますか? 私はこれを Java 1.3.1 と Swing でプログラミングしています。

4

14 に答える 14

83

同様の問題が発生し、これで解決しました:

import java.util.Enumeration;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;

public class GroupButtonUtils {

    public String getSelectedButtonText(ButtonGroup buttonGroup) {
        for (Enumeration<AbstractButton> buttons = buttonGroup.getElements(); buttons.hasMoreElements();) {
            AbstractButton button = buttons.nextElement();

            if (button.isSelected()) {
                return button.getText();
            }
        }

        return null;
    }
}

選択したボタンのテキストを返します。

于 2012-11-05T13:08:42.860 に答える
45

私はあなたJRadioButtonsをループして呼び出しますisSelected()。本当にから行きたい場合はButtonGroup、モデルにしかアクセスできません。モデルをボタンに一致させることもできますが、ボタンにアクセスできる場合は、それらを直接使用しないでください。

于 2008-10-14T14:12:36.560 に答える
37

setActionCommandに追加する必要がありJRadioButtonます。

String entree = entreeGroup.getSelection().getActionCommand();

例:

java = new JRadioButton("Java");
java.setActionCommand("Java");
c = new JRadioButton("C/C++");
c.setActionCommand("c");
System.out.println("Selected Radio Button: " + 
                    buttonGroup.getSelection().getActionCommand());
于 2014-08-11T15:11:11.990 に答える
5

各ラジオボタン(文字列)に actionCommand を入れることができます。

this.jButton1.setActionCommand("dog");
this.jButton2.setActionCommand("cat");
this.jButton3.setActionCommand("bird");

それらが既に ButtonGroup (この場合は state_group) にあると仮定すると、次のように選択されたラジオ ボタンを取得できます。

String selection = this.state_group.getSelection().getActionCommand();

お役に立てれば

于 2016-06-14T03:27:33.183 に答える
5

Swing でのモデル アプローチをそのまま使用することをお勧めします。コンポーネントをパネルおよびレイアウト マネージャーに配置した後は、そのコンポーネントへの特定の参照を維持する必要さえありません。

本当にウィジェットが必要な場合は、それぞれをisSelectedでテストするか、Map<ButtonModel,JRadioButton>.

于 2008-10-14T15:34:57.067 に答える
2

次のコードは、ボタンをクリックしたときにButtongroupから選択されたJRadiobuttonを表示します。
これは、特定のbuttonGroup内のすべてのJRadioButtonをループすることによって行われます。

 JRadioButton firstRadioButton=new JRadioButton("Female",true);  
 JRadioButton secondRadioButton=new JRadioButton("Male");  

 //Create a radio button group using ButtonGroup  
 ButtonGroup btngroup=new ButtonGroup();  

 btngroup.add(firstRadioButton);  
 btngroup.add(secondRadioButton);  

 //Create a button with text ( What i select )  
 JButton button=new JButton("What i select");  

 //Add action listener to created button  
 button.addActionListener(this);  

 //Get selected JRadioButton from ButtonGroup  
  public void actionPerformed(ActionEvent event)  
  {  
     if(event.getSource()==button)  
     {  
        Enumeration<AbstractButton> allRadioButton=btngroup.getElements();  
        while(allRadioButton.hasMoreElements())  
        {  
           JRadioButton temp=(JRadioButton)allRadioButton.nextElement();  
           if(temp.isSelected())  
           {  
            JOptionPane.showMessageDialog(null,"You select : "+temp.getText());  
           }  
        }            
     }
  }
于 2013-01-20T17:43:37.253 に答える
0
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 
public class MyJRadioButton extends JFrame implements ActionListener
{
    JRadioButton rb1,rb2;  //components
    ButtonGroup bg;
    MyJRadioButton()
{
    setLayout(new FlowLayout());
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    rb1=new JRadioButton("male");
    rb2=new JRadioButton("female");

    //add radio button to button group
    bg=new ButtonGroup();
    bg.add(rb1);
    bg.add(rb2);

    //add radio buttons to frame,not button group
    add(rb1);
    add(rb2);
    //add action listener to JRadioButton, not ButtonGroup
    rb1.addActionListener(this);
    rb2.addActionListener(this);
    pack();
    setVisible(true);
}
public static void main(String[] args)
{
    new MyJRadioButton(); //calling constructor
}
@Override
public void actionPerformed(ActionEvent e) 
{
    System.out.println(((JRadioButton) e.getSource()).getActionCommand());
}

}

于 2015-03-24T19:15:20.113 に答える
0

選択した項目のリストを返す ItemSelectable (ButtonModel のスーパーインターフェース) の getSelectedObjects() を使用できます。ラジオ ボタン グループの場合は、1 つだけにするか、まったく指定しないでください。

于 2008-10-14T14:20:30.740 に答える
0
import javax.swing.Action;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.JRadioButton;
import javax.swing.JToggleButton;

public class RadioButton extends JRadioButton {

    public class RadioButtonModel extends JToggleButton.ToggleButtonModel {
        public Object[] getSelectedObjects() {
            if ( isSelected() ) {
                return new Object[] { RadioButton.this };
            } else {
                return new Object[0];
            }
        }

        public RadioButton getButton() { return RadioButton.this; }
    }

    public RadioButton() { super(); setModel(new RadioButtonModel()); }
    public RadioButton(Action action) { super(action); setModel(new RadioButtonModel()); }
    public RadioButton(Icon icon) { super(icon); setModel(new RadioButtonModel()); }
    public RadioButton(String text) { super(text); setModel(new RadioButtonModel()); }
    public RadioButton(Icon icon, boolean selected) { super(icon, selected); setModel(new RadioButtonModel()); }
    public RadioButton(String text, boolean selected) { super(text, selected); setModel(new RadioButtonModel()); }
    public RadioButton(String text, Icon icon) { super(text, icon); setModel(new RadioButtonModel()); }
    public RadioButton(String text, Icon icon, boolean selected) { super(text, icon, selected); setModel(new RadioButtonModel()); }

    public static void main(String[] args) {
        RadioButton b1 = new RadioButton("A");
        RadioButton b2 = new RadioButton("B");
        ButtonGroup group = new ButtonGroup();
        group.add(b1);
        group.add(b2);
        b2.setSelected(true);
        RadioButtonModel model = (RadioButtonModel)group.getSelection();
        System.out.println(model.getButton().getText());
    }
}
于 2014-05-14T13:04:41.537 に答える
-3
jRadioOne = new javax.swing.JRadioButton();
jRadioTwo = new javax.swing.JRadioButton();
jRadioThree = new javax.swing.JRadioButton();

...次に、すべてのボタンについて:

buttonGroup1.add(jRadioOne);
jRadioOne.setText("One");
jRadioOne.setActionCommand(ONE);
jRadioOne.addActionListener(radioButtonActionListener);

...リスナー

ActionListener radioButtonActionListener = new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                radioButtonActionPerformed(evt);
            }
        };

...イベントへの応答として必要なことは何でも行います

protected void radioButtonActionPerformed(ActionEvent evt) {            
       System.out.println(evt.getActionCommand());
    }
于 2008-10-14T14:36:51.503 に答える