1

私のプロジェクトでは、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();
    }
}
4

1 に答える 1

1

まず、選択ラベルの命名規則が間違っています。qLabel="questions"、aLabel="questions"、bLabel="a"、cLabel="b" など。混乱を解消し、コードを読みやすくするために修正することをお勧めします (つまり、質問)。

第二に、panEast.add("West",panlabels);と 他の 2 つのステートメントの使用は一般的に推奨されていません。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))。2 つの列を使用すると、すべてが同じサイズGridLayoutになるため、常に物事が適切に並べられます。GridLayout

最後に、ループからの追加を引き出し、choices[]ラベルと一緒にそれを行って、物事が確実に整列するようにしました。に追加されている pancontrols を除いて、追加されているすべてのパネルを削除しましたpa。その場合、pa にさらに質問パネルを追加したいと思います。それは特にあなたの質問をカバーしていますが、あなたがしなければならないことはかなりたくさんあります(つまり、たとえばchoice[0]を使用して、未使用のラベルやパネルを削除するなど)

于 2012-04-14T14:05:33.857 に答える