在一个JFrame中组织多个JPanel的好方法是什么? [英] What is a good way to Organize multiple JPanel's in a JFrame?

查看:121
本文介绍了在一个JFrame中组织多个JPanel的好方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想做的是在框架中组织五个独立的JPanel.输出应该是这样的:顶部会有一个面板.顶部面板正下方的两个面板垂直地划分了空间,然后另外两个面板水平地划分了剩余的空间.

What I am trying to do is organize five seperate JPanel's within the frame. Here is what the output is supposed to look like: There will be one panel across the top. Two panels directly below the top panel that vertically split the space and then another two panels that split the remaining space horizontally.

我无法弄清楚如何组织如上所述的面板,我认为这是因为我只是不知道正确的语法.因此,非常感谢您提供的所有帮助或建议,这是我到目前为止的代码.

I cannot figure out how to organize the panels like described above and I think it is because I just don't know the proper syntax. So any help or advise is greatly appreciated here is the code I have thus far.

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);
}

推荐答案

使用布局管理器.切勿设置面板和其他组件的边界,大小和位置.那是布局管理器的工作.布局管理器在 Swing教程中详细解释(作为所有内容否则,顺便说一句.)

Use a layout manager. Never set the bounds, sizes and locations of your panels and other components. That's the job of the layout manager. Layout managers are explained in details in the Swing tutorial (as everything else, BTW).

例如,您可以在主面板上使用BorderLayout,在底面板上使用BorderLayout.

You could use a BorderLayout for the main panel, and another for the bottom panel, for example.

这篇关于在一个JFrame中组织多个JPanel的好方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆