【问题标题】:How can I display two Radio Buttons in the same row?如何在同一行显示两个单选按钮?
【发布时间】:2018-09-07 15:01:09
【问题描述】:

我是 Java 初学者。我被分配了创建一个 Java 窗口的任务,任何用户都应该能够在其中输入他们的个人数据(姓名、姓氏、性别等),然后最后单击提交按钮。

为了创建这样的窗口,我添加了一个BorderLayout 和四个使用GridLayout 的面板。我的程序让我卡住的主要问题是我无法将两个单选按钮放在同一行。我尝试在JPanel 中同时使用GridLayoutTableLayout 来解决问题,但没有成功。

这是它的外观截图:

如图所示,“F”单选按钮应放置在“M”单选按钮旁边,而不是下方。

这是我的代码:

import java.awt.*;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class Finestra extends JFrame

{

public Finestra ()

{
    super("Dati Utente");
    this.setBounds(300,50,400,500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container c = getContentPane();
    c.setLayout(new BorderLayout());

    Panel panel1 = new Panel (new GridLayout(1,1));
    Panel panel2 = new Panel (new GridLayout(1,1));
    Panel panel3 = new Panel (new GridLayout(5,1));
    Panel panel4 = new Panel (new GridLayout(5,1));

    panel1.setPreferredSize(new Dimension(100,50));
    panel2.setPreferredSize(new Dimension(100,50));
    panel3.setPreferredSize(new Dimension (100,200));
    panel4.setPreferredSize(new Dimension (260,200));

    c.add(panel1, BorderLayout.NORTH);
    c.add(panel2, BorderLayout.SOUTH);
    c.add(panel3, BorderLayout.WEST);
    c.add(panel4, BorderLayout.EAST);

    JLabel label1 = new JLabel ("Personal Data");
    label1.setHorizontalAlignment(SwingConstants.CENTER);
    label1.setFont(new Font ("Open Sans",Font.BOLD,20));
    panel1.add(label1);

    JLabel label2 = new JLabel ("Name");
    label2.setFont(new Font ("Open Sans", Font.PLAIN,14));
    label2.setBorder(new EmptyBorder(0,15,0,0));

    JLabel label3 = new JLabel ("Last Name");
    label3.setFont(new Font ("Open Sans", Font.PLAIN,14));
    label3.setBorder(new EmptyBorder(0,15,0,0));

    JLabel label4 = new JLabel ("Gender");
    label4.setFont(new Font ("Open Sans", Font.PLAIN,14));
    label4.setBorder(new EmptyBorder(0,15,0,0));

    JLabel label5 = new JLabel ("Hobby");
    label5.setFont(new Font ("Open Sans", Font.PLAIN,14));
    label5.setBorder(new EmptyBorder(0,15,0,0));

    JLabel label6 = new JLabel ("Nationality");
    label6.setFont(new Font ("Open Sans", Font.PLAIN,14));
    label6.setBorder(new EmptyBorder(0,15,0,0));

    panel3.add(label2);
    panel3.add(label3);
    panel3.add(label4);
    panel3.add(label5);
    panel3.add(label6);

    JTextField f1 = new JTextField();
    JTextField f2 = new JTextField();

    f1.setPreferredSize(new Dimension(180,30));
    f2.setPreferredSize(new Dimension(180,30));

    JPanel fp1 = new JPanel (), fp2 = new JPanel ();

    fp1.setBorder(new EmptyBorder(15,0,0,0));
    fp2.setBorder(new EmptyBorder(15,0,0,0));

    fp1.add(f1);
    fp2.add(f2);

    panel4.add(fp1);
    panel4.add(fp2);


    JRadioButton button1 = new JRadioButton("M"),button2 = new JRadioButton(("F"));


    button1.setHorizontalAlignment(SwingConstants.CENTER);  button2.setHorizontalAlignment(SwingConstants.CENTER);

    ButtonGroup bgroup1 = new ButtonGroup();

    bgroup1.add(button1); bgroup1.add(button2);

    panel4.add(button1); panel4.add(button2);


    setVisible(true);
}

如何在同一行显示两个单选按钮?

【问题讨论】:

  • 我推荐使用JPanels 而不是Panels。

标签: java swing radio-button jpanel layout-manager


【解决方案1】:

不要将button1button2 添加到panel4,而是将它们添加到具有水平布局的新JPanel,并将新的JPanel 添加到panel4

JRadioButton button1 = new JRadioButton("M"),button2 = new JRadioButton(("F"));
button1.setHorizontalAlignment(SwingConstants.CENTER);  button2.setHorizontalAlignment(SwingConstants.CENTER);
ButtonGroup bgroup1 = new ButtonGroup();
bgroup1.add(button1); bgroup1.add(button2);
JPanel radiobuttonpanel = new JPanel();
BoxLayout radiobuttonpanellayout = new BoxLayout(radiobuttonpanel, BoxLayout.X_AXIS);
radiobuttonpanel.setLayout(radiobuttonpanellayout);
radiobuttonpanel.add(button1); radiobuttonpanel.add(button2);
panel4.add(radiobuttonpanel);

【讨论】:

  • “请投票” 这需要一定数量的代表。点能够投票,但如果 OP 继续发布像这样的好、明确的问题,我想他们很快就会能够投票。
猜你喜欢
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多