4

私がやろうとしているのは、フレーム内に5つの別々のJPanelを編成することです。出力は次のようになります。上部に1つのパネルがあります。スペースを垂直方向に分割するトップパネルの真下にある2つのパネルと、残りのスペースを水平方向に分割する別の2つのパネル。

ここに画像の説明を入力してください

上記のようにパネルを整理する方法がわかりません。適切な構文がわからないためだと思います。ですから、ここで助けやアドバイスをいただければ幸いです。これまでのコードです。

import java.lang.String.*;
import java.lang.Exception.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Display extends JFrame implements ActionListener{
// instance variables
private static final int FRAME_WIDTH = 400;
private static final int FRAME_HEIGHT = 350;

private static final int FRAME_X_ORIGIN = 150;
private static final int FRAME_Y_ORIGIN = 150;

private static final int BUTTON_WIDTH = 90;
private static final int BUTTON_HEIGHT = 30;

private JButton readFile;
private JButton exit;
private JButton stats;
private JButton blank;

private JCheckBox avgHomeworkScore;
private JCheckBox avgTestScore;
private JCheckBox sdHomeworkScore;
private JCheckBox sdTestScore;

private JRadioButton buttonOne;
private JRadioButton buttonTwo;
private JRadioButton buttonThree;
private JRadioButton buttonFour;

private JPanel header;
private JPanel statistics;
private JPanel courses;
private JPanel display;
private JPanel action;

public static void main(String[] args){
    Display frame = new Display();
    frame.setVisible(true);
}


public Display(){

    Container contentPane;


    //Set the frame properties
    setSize         (FRAME_WIDTH, FRAME_HEIGHT);
    setResizable    (false);
    setTitle        ("CSCE155A Course Offerings Viewer");
    setLocation     (FRAME_X_ORIGIN, FRAME_Y_ORIGIN);

    contentPane = getContentPane();
    contentPane.setLayout(new GridLayout());
    contentPane.setBackground( Color.white );

    //header





    //Create and Place the Buttons on the frame
    readFile = new JButton("Read File");
    readFile.setBounds(4, 285, BUTTON_WIDTH, BUTTON_HEIGHT);


    exit = new JButton("Exit");
    exit.setBounds(100, 285, BUTTON_WIDTH, BUTTON_HEIGHT);


    stats = new JButton("Stats");
    stats.setBounds(195, 285, BUTTON_WIDTH, BUTTON_HEIGHT);


    blank = new JButton("Clear");
    blank.setBounds(290, 285, BUTTON_WIDTH, BUTTON_HEIGHT);


    action = new JPanel(new FlowLayout());
    action.setBackground(Color.blue);
    action.add(readFile); 
    action.add(exit);
    action.add(stats);
    action.add(blank);
    contentPane.add(action);

    //Register this frame as an Action listener of the buttons
    readFile.addActionListener(this);
    exit.addActionListener(this);
    stats.addActionListener(this);
    blank.addActionListener(this);

    //Create and Place the checkboxes on the frame
    avgHomeworkScore = new JCheckBox();
    avgHomeworkScore.setMnemonic(KeyEvent.VK_H);
    contentPane.add(avgHomeworkScore);
    avgHomeworkScore.setSelected(true);

    avgTestScore = new JCheckBox();
    avgTestScore.setMnemonic(KeyEvent.VK_T);
    avgTestScore.setSelected(true);

    sdHomeworkScore = new JCheckBox();
    sdHomeworkScore.setMnemonic(KeyEvent.VK_S);
    sdHomeworkScore.setSelected(true);

    sdTestScore = new JCheckBox();
    sdTestScore.setMnemonic(KeyEvent.VK_D);
    sdTestScore.setSelected(true);

    statistics = new JPanel(new GridLayout(0,1));
    contentPane.add(statistics);
    statistics.add(avgHomeworkScore);
    statistics.add(avgTestScore);
    statistics.add(sdHomeworkScore);
    statistics.add(sdTestScore);

    avgHomeworkScore.addActionListener(this);
    avgTestScore.addActionListener(this);
    sdHomeworkScore.addActionListener(this);
    sdTestScore.addActionListener(this);



    //create the radio buttons
    buttonOne = new JRadioButton();
    buttonOne.setMnemonic(KeyEvent.VK_1);
    buttonOne.setSelected(true);

    buttonTwo = new JRadioButton();
    buttonTwo.setMnemonic(KeyEvent.VK_2);

    buttonThree = new JRadioButton();
    buttonThree.setMnemonic(KeyEvent.VK_3);

    buttonFour = new JRadioButton();
    buttonFour.setMnemonic(KeyEvent.VK_4);

    ButtonGroup group = new ButtonGroup();
    group.add(buttonOne);
    group.add(buttonTwo);
    group.add(buttonThree);
    group.add(buttonFour);

    buttonOne.addActionListener(this);
    buttonTwo.addActionListener(this);
    buttonThree.addActionListener(this);
    buttonFour.addActionListener(this);

    courses = new JPanel(new GridLayout(0,1));
    courses.setBackground(Color.blue);
    courses.add(buttonOne);
    courses.add(buttonTwo);
    courses.add(buttonThree);
    courses.add(buttonFour);
    contentPane.add(courses);

    //Exit program when the viewer is closed
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}
4

1 に答える 1

7

レイアウトマネージャーを使用します。パネルやその他のコンポーネントの境界、サイズ、位置を設定しないでください。それがレイアウトマネージャーの仕事です。レイアウトマネージャーについては、Swingチュートリアルで詳しく説明されています(他のすべての場合と同様)。

たとえば、メインパネルにBorderLayoutを使用し、下部パネルに別のBorderLayoutを使用できます。

于 2012-11-26T19:14:13.163 に答える