当我运行下面的代码时,前两个按钮不会出现;但是,第三个在框架中可见。
public class RadioButton {
RadioButton(){
JFrame frame = new JFrame();
JRadioButton button1 = new JRadioButton("One");
button1.setBounds(50, 20, 50, 20);
JRadioButton button2 = new JRadioButton("Two");
button2.setBounds(50, 50, 50, 20);
JRadioButton button3 = new JRadioButton("Three");
button2.setBounds(50, 80, 50, 20);
ButtonGroup bg = new ButtonGroup();
bg.add(button1);
bg.add(button2);
bg.add(button3);
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setSize(300, 300);
frame.setVisible(true);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new RadioButton();
}
}
答案 0 :(得分:1)
您需要为容器设置布局管理器,我建议您阅读tutorial。
RadioButton(){
JFrame frame = new JFrame();
JRadioButton button1 = new JRadioButton("One");
JRadioButton button2 = new JRadioButton("Two");
JRadioButton button3 = new JRadioButton("Three");
ButtonGroup bg = new ButtonGroup();
bg.add(button1);
bg.add(button2);
bg.add(button3);
frame.getContentPane().setLayout(new FlowLayout());
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
答案 1 :(得分:1)
我猜是因为OP将布局管理器设置为null,所以绝对定位是想要的。通常不建议这样做。请参阅tutorial。
您需要按如下方式重新排序代码 - 即在设置组件范围之前设置布局。
public class RadioButton {
RadioButton() {
JFrame frame = new JFrame();
JRadioButton button1 = new JRadioButton("One");
JRadioButton button2 = new JRadioButton("Two");
JRadioButton button3 = new JRadioButton("Three");
ButtonGroup bg = new ButtonGroup();
frame.setLayout(null);
bg.add(button1);
bg.add(button2);
bg.add(button3);
frame.setSize(300, 300);
frame.add(button1);
frame.add(button2);
frame.add(button3);
button1.setBounds(50, 20, 80, 20);
button2.setBounds(50, 50, 80, 20);
button3.setBounds(50, 80, 80, 20);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.setVisible(true);
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new RadioButton();
}
}
我正在使用OS X,我需要让按钮更大一些,以避免它们的字幕显示为“...”。最后我使用invokeLater
,IIRC是最佳实践。
答案 2 :(得分:1)
JFrame
的默认布局为BorderLayout
。如果不指定区域,则添加的每个组件都将放入BorderLayout.CENTER
。由于button3是最后添加的,因此它替换了button2(button2在添加时替换了button1)。您可以使用JPanel
创建FlowLayout
,然后在其中添加三个按钮。然后将JPanel
添加到JFrame
。