单选框简单问题,送分!!!

satangf 2004-01-31 09:18:35
有一定数量的单选框JRadioButton,都加入到一个ButtonGroup中,如何通过这个ButtonGroup得到用户选中的是哪一个单选框?
...全文
101 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
satangf 2004-02-01
to hfree():
你的是自己做的监听类,并且在监听类内判断被选中的按钮,而且为每一个按钮都设置监听,这样的话,违背了问题的本意,如果是这样的话,我可以直接遍历每个JRadioButton,调用JRadioButton的isSelected()方法判断是否被选中。

to ye255(水鱼):
当然,也可以像ye255(水鱼)一样直接为每一个按钮设置监听,想问一下,如果有好几百个按钮,难道就要设置好几百个监听?这样会不会影响系统性能?

to kypfos(不管是黑手还是白手,能捞到的就是好手!):
当然也可以向kypfos(不管是黑手还是白手,能捞到的就是好手!)说得那样,直接遍历每个按钮,这也是最原始的方法,但是如果按钮成百上千,这样遍历的话,会不会很慢呢?

为什么ButtonGroup没有那种直接得到此组中被选中的单选框这样的方法呢?
难道真的只能遍历或者为每个按钮设置监听吗?
回复
hfree 2004-02-01
楼上没有明我的意思

class MyButton extend Button{
Button SelectedB ;
Button b1 = new Button("b1") ;
Button b2 = new Button("b2") ;

ButtonGroup group ;
group.add(b1) ;
group.add(b2) ;
//内部监听器类,可以访问外问类的selectB,从而得到选中的是哪一个按钮.
class MyButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Button b = event.getSource() ;

if( b == b1)
SelectB = b1 ; //设置选中按钮
else if(b == b2 )
SelectB = b2 ;
}
}//listener class

//以下给按钮加上监听器
MyButtonListner listener = new MyButtonListener() ;
b1.addActionListener(listener) ;
b2.addActionListener(listener) ;
}//MyButton

不知道这一个答案行否?
回复
ye255 2004-02-01
core java 里面建议使用独立的动作监听器:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class RadioButtonTest
{
public static void main(String[] args)
{
RadioButtonFrame frame = new RadioButtonFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}

/**
* A frame with a sample text label and radio buttons for selecting font sizes.
*/
class RadioButtonFrame extends JFrame
{
public RadioButtonFrame()
{
setTitle("RadioButtonTest");
setSize(WIDTH, HEIGHT);

Container contentPane = getContentPane();

// add the sample text label
label = new JLabel("The quick brown fox jumps over the lazy dog");
label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE));
contentPane.add(label, BorderLayout.CENTER);

// add the radio buttons
buttonPanel = new JPanel();
group = new ButtonGroup();

addRadioButton("Small", 8);
addRadioButton("medium", 12);
addRadioButton("Large", 18);
addRadioButton("Extra large", 36);

contentPane.add(buttonPanel, BorderLayout.SOUTH);
}

/**
* Adds a radio button that sets the font size of the sample text.
* @param name the string to appear on the button
* @param size the font size that this button sets
*/
public void addRadioButton(String name, final int size)
{
boolean selected = (size == DEFAULT_SIZE);
JRadioButton button = new JRadioButton(name, selected);
group.add(button);
buttonPanel.add(button);

// this lisetner sets the label font size
ActionListener listener = new
ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
// size refers to the final parameter of the addRadioButton method
label.setFont(new Font("serif", Font.PLAIN, size));
}
};

button.addActionListener(listener);
}

public static final int WIDTH = 400;
public static final int HEIGHT = 200;

private JPanel buttonPanel;
private ButtonGroup group;
private JLabel label;
private static final int DEFAULT_SIZE = 12;
}
回复
ye255 2004-02-01
buttonGroup.getSelection().getActionCommand()
回复
YanbinQiu 2004-02-01
遍历吧,不复杂
用getElements() 得到所有的Button

你总是需要得到被选择的Button的索引
不管你怎么想机制总会是一个的

或者扩展ButtonGroup,加一个方法getSelectedIndex()就可以啦
自己实现那个方法,一样的。
回复
satangf 2004-02-01
有没有高手来看看呀????????????????
回复
satangf 2004-02-01
对了,顺便问一句:
如果有好几百个按钮,为每个按钮设置监听,这样会不会影响系统性能?
回复
satangf 2004-02-01
好!谢谢各位,谢谢各位高手的帮忙!结帖!
回复
qingfeng5332 2004-02-01
up!
回复
YanbinQiu 2004-02-01
直接遍历每个按钮,这也是最原始的方法,但是如果按钮成百上千,这样遍历的话,会不会很慢呢?

不管使用什么方法,内部判定机制总是要遍历,找到了就跳出,如果有兴趣安排你用二分查找算法也可以,实际的按钮数肯定不会太多,也不会慢的。
回复
satangf 2004-01-31
哎,各位没有明白我的意思,如果这个ButtonGroup组中有很多很多的单选框,难道每次都要对所有的单选框判断一次才能得到被选中的单选框吗?

有没有办法每次只要对这个ButtonGroup组判断一次就能得到被选中的JRadioButton呢?
回复
wangrong001 2004-01-31
JRadioButton.checked = true;
其中,jradiobutton代表name!
回复
satangf 2004-01-31
to hfree:

getSource()?ButtonGroup对象没有这种方法吧!

高手,快来帮忙啊!!!
回复
flying310 2004-01-31
JRadioButton.checked=true就是被选中的。
回复
tiger_wkh52741 2004-01-31
监听ButtonGroup以及其中的每个单选框JRadioButton就ok了!
回复
hfree 2004-01-31
用GetSource() 吧.
回复
相关推荐
发帖
Java SE
创建于2007-09-28

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2004-01-31 09:18
社区公告
暂无公告