フォームにラジオボタンを含むswingアプリケーションがあります。 ButtonGroup
がありますが、使用可能なメソッドを見ると、選択したJRadioButton
の名前を取得できないようです。これまでのところ、次のことがわかります。
ButtonGroupから、getSelection()
を実行してButtonModel
を返すことができます。そこからgetActionCommand
を実行できますが、それが常に機能するとは限りません。さまざまなテストを試してみましたが、予測できない結果になりました。
また、ButtonGroup
から、getElements()
から列挙を取得できます。ただし、選択したボタンかどうかを確認するために、各ボタンをループする必要があります。
どのボタンが選択されているかを見つける簡単な方法はありますか?これをJava 1.3.1およびSwingでプログラミングしています。
JRadioButtons
をループして、isSelected()
を呼び出します。 ButtonGroup
から本当に行きたい場合は、モデルにのみアクセスできます。モデルをボタンに一致させることもできますが、ボタンにアクセスできる場合は、直接使用しないのはなぜですか?
私は同様の問題を抱えてこれで解決しました:
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;
}
}
選択したボタンのテキストを返します。
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());
Swingのモデルアプローチにまっすぐ進むことをお勧めします。コンポーネントをパネルとレイアウトマネージャーに配置した後、そのコンポーネントへの特定の参照を保持することさえしません。
本当にウィジェットが必要な場合は、isSelected
でそれぞれをテストするか、Map<ButtonModel,JRadioButton>
を維持できます。
各ラジオボタン(文字列)にactionCommandを配置できます。
this.jButton1.setActionCommand("dog");
this.jButton2.setActionCommand("cat");
this.jButton3.setActionCommand("bird");
それらが既にButtonGroup(この場合はstate_group)にあると仮定すると、次のように選択したラジオボタンを取得できます。
String selection = this.state_group.getSelection().getActionCommand();
お役に立てれば
次のコードは、ボタンをクリックするとJRadiobuttonがButtongroupから選択されるを表示します。
これは、特定の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());
}
}
}
}
次に、ラジオボタンをボタングループに追加します。
buttonGroup.getSelection()。getActionCommand
isSelected()
メソッドを使用します。これにより、radioButtonの状態がわかります。ループ(forループなど)と組み合わせて使用すると、選択されているループを見つけることができます。
ItemSelectable(ButtonModelのスーパーインターフェース)のgetSelectedObjects()を使用して、選択されたアイテムのリストを返すことができます。ラジオボタングループの場合は、1つのみにすることも、まったくなしにすることもできます。
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());
}
}
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());
}
}