java - Java 中标签和单选组之间不需要的线

标签 java swing radio-button label

在我的项目中,我使用 Swing 控件。我将标签与按钮组一起使用,但有一条不需要的线。请帮忙。每个单选按钮组都有一个关联的标签。不需要的行就在那里。如何将标签和相应的单选按钮组添加到同一面板

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//import java.util.Arrays;

public class Online extends JFrame {

    static JRadioButton[] choice = new JRadioButton[6];
    JFrame jtfMainFrame, jtfMainFrame1;

    public void createWindow() {

        jtfMainFrame = new JFrame("Online Examination");
        jtfMainFrame.setSize(800, 500);
        jtfMainFrame.setLocation(200, 150);
        jtfMainFrame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        JPanel pa = new JPanel();

        JPanel panlabels = new JPanel(new GridLayout(0, 1, 0, 60));

        JPanel pancontrols = new JPanel(new GridLayout(0, 1, 0, 60));
        JPanel panEast = new JPanel();

        JPanel pan = new JPanel(new FlowLayout());
        JLabel qLabel = new JLabel("Question.");
        qLabel.setOpaque(true);
        qLabel.setForeground(Color.blue);
        qLabel.setBackground(Color.lightGray);

        JLabel aLabel = new JLabel("Question.");
        aLabel.setOpaque(true);
        aLabel.setForeground(Color.blue);
        aLabel.setBackground(Color.lightGray);

        JLabel bLabel = new JLabel("a.");
        bLabel.setOpaque(true);
        bLabel.setForeground(Color.blue);
        bLabel.setBackground(Color.lightGray);

        JLabel cLabel = new JLabel("b.");
        cLabel.setOpaque(true);
        cLabel.setForeground(Color.blue);
        cLabel.setBackground(Color.lightGray);

        JLabel dLabel = new JLabel("c.");
        dLabel.setOpaque(true);
        dLabel.setForeground(Color.blue);
        dLabel.setBackground(Color.lightGray);

        JLabel eLabel = new JLabel("d.");
        eLabel.setOpaque(true);
        eLabel.setForeground(Color.blue);
        eLabel.setBackground(Color.lightGray);

        panlabels.add(aLabel, BorderLayout.WEST);
        panlabels.add(bLabel, BorderLayout.CENTER);
        panlabels.add(cLabel, BorderLayout.CENTER);
        panlabels.add(dLabel, BorderLayout.CENTER);
        panlabels.add(eLabel, BorderLayout.CENTER);
        //panlabels.add(fLabel, BorderLayout.WEST);
        //fLabel.setVisible(false);

        JLabel ques = new JLabel("q");
        ques.setBackground(Color.red);

        choice[1] = new JRadioButton("a");
        choice[1].setBackground(Color.red);

        choice[2] = new JRadioButton("b");
        choice[2].setBackground(Color.red);

        choice[3] = new JRadioButton("c");
        choice[3].setBackground(Color.red);

        choice[4] = new JRadioButton("d");
        choice[4].setBackground(Color.red);

        ButtonGroup bGroup = new ButtonGroup();
        pancontrols.add(ques, BorderLayout.WEST);
        for (int i = 1; i < 5; i++) {
            // pancontrols.add(aLabel,BorderLayout.WEST);
            bGroup.add(choice[i]);

            pancontrols.add(choice[i], BorderLayout.WEST);
        }
        choice[4].setVisible(true);
         panEast.add("West", panlabels);
        panEast.add("West", pancontrols);
        pa.add("Center", panEast);
        pa.setBorder(BorderFactory.createTitledBorder(
            BorderFactory.createEtchedBorder(), "Select your answer"));

        //getContentPane().add(label);
        //to be deleted pa.add("South", pan);
        pa.setBackground(Color.pink);
        jtfMainFrame.add(pa);
        jtfMainFrame.setExtendedState(Frame.MAXIMIZED_BOTH);

        jtfMainFrame.setVisible(true);
    }

    public static void main(String[] args) {
        Online r = new Online();
        r.createWindow();
    }
}

最佳答案

首先,您的选择标签的命名约定已关闭。 qLabel="questions"、aLabel="questions"、bLabel="a"、cLabel="b"等。我建议您修复该问题以消除困惑并使代码更具可读性(即只有一个标签是问题)。

其次,通常不建议使用 panEast.add("West",panlabels); 和其他两个语句。阅读 BorderLayout 找到更容易接受的方法: http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

至于您的问题,我已经重写了您的代码,以便事情能够保持一致,我将尝试指出我注释掉的内容以提供帮助:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//import java.util.Arrays;

public class Online extends JFrame {

    static JRadioButton[] choice = new JRadioButton[6];
    JFrame jtfMainFrame, jtfMainFrame1;

    public void createWindow() {

        jtfMainFrame = new JFrame("Online Examination");
    jtfMainFrame.setSize(800, 500);
    jtfMainFrame.setLocation(200, 150);
    jtfMainFrame.addWindowListener(new WindowAdapter() {

        @Override
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    JPanel pa = new JPanel();

    //JPanel panlabels = new JPanel(new GridLayout(0, 1, 0, 60));

    JPanel pancontrols = new JPanel(new GridLayout(0, 2, 0, 60));
    JPanel panEast = new JPanel();

    JPanel pan = new JPanel(new BorderLayout());
    JLabel qLabel = new JLabel("Question.");
    qLabel.setOpaque(true);
    qLabel.setForeground(Color.blue);
    qLabel.setBackground(Color.lightGray);

    JLabel aLabel = new JLabel("Question.");
    aLabel.setOpaque(true);
    aLabel.setForeground(Color.blue);
    aLabel.setBackground(Color.lightGray);

    JLabel bLabel = new JLabel("a.");
    bLabel.setOpaque(true);
    bLabel.setForeground(Color.blue);
    bLabel.setBackground(Color.lightGray);

    JLabel cLabel = new JLabel("b.");
    cLabel.setOpaque(true);
    cLabel.setForeground(Color.blue);
    cLabel.setBackground(Color.lightGray);

    JLabel dLabel = new JLabel("c.");
    dLabel.setOpaque(true);
    dLabel.setForeground(Color.blue);
    dLabel.setBackground(Color.lightGray);

    JLabel eLabel = new JLabel("d.");
    eLabel.setOpaque(true);
    eLabel.setForeground(Color.blue);
    eLabel.setBackground(Color.lightGray);


    //panlabels.add(fLabel, BorderLayout.WEST);
    //fLabel.setVisible(false);

    JLabel ques = new JLabel("q");
    ques.setBackground(Color.red);

    choice[1] = new JRadioButton("a");
    choice[1].setBackground(Color.red);

    choice[2] = new JRadioButton("b");
    choice[2].setBackground(Color.red);

    choice[3] = new JRadioButton("c");
    choice[3].setBackground(Color.red);

    choice[4] = new JRadioButton("d");
    choice[4].setBackground(Color.red);

    ButtonGroup bGroup = new ButtonGroup();
    //pancontrols.add(new JLabel(""));
    pancontrols.add(ques, BorderLayout.WEST);
    for (int i = 1; i < 5; i++) {
        // pancontrols.add(aLabel,BorderLayout.WEST);
        bGroup.add(choice[i]);

    }

    pancontrols.add(qLabel);
    pancontrols.add(ques);

    pancontrols.add(bLabel);
    pancontrols.add(choice[1]);
    pancontrols.add(cLabel);
    pancontrols.add(choice[2]);
    pancontrols.add(dLabel);
    pancontrols.add(choice[3]);
    pancontrols.add(eLabel);
    pancontrols.add(choice[4]);
    pancontrols.setSize(400,200);
    choice[4].setVisible(true);
    pa.add(pancontrols);
    pa.setBorder(BorderFactory.createTitledBorder(
        BorderFactory.createEtchedBorder(), "Select your answer"));

    //getContentPane().add(label);
    //to be deleted pa.add("South", pan);
        pa.setBackground(Color.pink);
        jtfMainFrame.add(pa);
        jtfMainFrame.setExtendedState(Frame.MAXIMIZED_BOTH);

        jtfMainFrame.setVisible(true);
    }

    public static void main(String[] args) {
        Online r = new Online();
        r.createWindow();
    }
}

基本上,我删除了您不必要的面板。现在您添加内容的唯一面板是 pancontrols 面板。我将其更改为 new JPanel(new Gridlayout(0,2,0,60))。使用两列 GridLayout 时,您将始终将所有内容按绑定(bind)方式排列,因为 GridLayout 使所有内容的大小相同。

最后,我从循环中添加了 choices[] ,并与标签一起执行此操作,以确保一切保持一致。我删除了所有添加的面板,除了添加到 pa 的 pancontrols,我假设您想在这种情况下向 pa 添加更多问题面板。这特别涵盖了您的问题,但是您应该做很多事情(例如,使用 choice[0],消除未使用的标签和面板等)

关于java - Java 中标签和单选组之间不需要的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10150922/

相关文章:

java - 在 html 中嵌入 java swing

java - 如何在 JTable 中按日期对记录进行排序?

java - LibGDX - JFrame 中的 Lwjgl Canvas 无法跨平台工作

android - 单选按钮的自定义图标

c# - 如何设置radio.IsChecked = true;使用 C# 以编程方式连接到特定的单选按钮

java - 使用 if( !"D".equalsIgnoreCase(answer)) 比较字符串不起作用

java - 如何通过按按钮重置 MDC 微调器(AutoCompleteTextview/ExposedDropdownMenu)中的选定项目

java - 如何运行我在 TI-84 Plus 计算器上编写的 Java 程序?

java - Spring MessageSource 通过多个语言环境查找

javascript - 我有一个在 iframe 内带有单选按钮的表单,将文本插入到父文本区域。 "Undefined"来到 texarea 而不是单选按钮值