2012-11-26 52 views
4

我想要做的是在框架內組織五個獨立的JPanel。以下是輸出應該是這樣的:頂部將會有一個面板。垂直分割空間的頂部面板下方的兩個面板,以及另外兩個水平分割剩餘空間的面板。什麼是在JFrame中組織多個JPanel的好方法?

enter image description here

我無法弄清楚如何組織面板如同上述,我認爲這是因爲我只是不知道正確的語法。所以任何幫助或建議非常感謝這裏是我迄今爲止的代碼。

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

您可以使用ASCII-art來展示您希望如何排列面板。 – David

回答

7

使用佈局管理器。切勿設置面板和其他組件的邊界,大小和位置。這是佈局經理的工作。版面管理器在the Swing tutorial中詳細解釋(如其他所有,順便說一句)。

例如,您可以爲主面板使用BorderLayout,爲底部面板使用BorderLayout。

+0

我最初試圖用GridLayout來組織它,但它不起作用。我發佈了它應該看起來像上面的內容。佈局經理能做到嗎? – user1854263

+0

您可以在北部使用帶有CSC ...標籤的BorderLayout,中部的請選擇面板,東部的課程產品以及包含南部兩個其他面板的面板。這個南方面板本身會使用帶有中心統計數據的BorderLayout和南方的按鈕。 GridBagLayout,GroupLayout等也有其他可能性。 –

相關問題