user3058734
user3058734

Reputation: 21

JFrame Layout with JPanels

I am having a problem trying to layout my JFrame. I'm trying to add the ToolBar top, then Info below that, then colour below that to the right, then Copies in the center, then Print button to left and then the Printer List to the bottom. If anyone could help me in the right direction would be great.

// Declare GUI Components here
// One JToolBar & JButton
private JPanel mainPanel;
private JPanel detailPanel;
private JPanel toolBarPanel;
private JToolBar jToolbar;
private JButton jbtAdmin, jbtHelp;

   // A JPanel called infoPanel & JLabel
    private JPanel infoPanel;
    private JLabel jlblOne;

   // A JPanel called colourPanel
    private JPanel colourPanel;
    private JRadioButton bwRadioButton, colourRadioButton;
    private ButtonGroup btg;



   // A JPanel called noCopiesPanel
    private JPanel noCopiesPanel;
    private JLabel jlbCopies;
    private JTextField jtfCopies;


// A JPanel called printerPanel
private JPanel printerPanel;
private JComboBox printerBox;

private JButton jbtPrint;

// Constructor - SetLayout & Add Components here...
// Constructor takes in the selected student and assigns it to currentStudent
public StudentFrame(Student studentIn){
    // Set up currentStudent
    currentStudent=studentIn;

  // Set up Toolbar & add jbtAdmin
  toolBarPanel = new JPanel();
   toolBarPanel.add(jToolbar = new JToolBar());
   jToolbar.add(jbtAdmin = new JButton("Admin"));
  jToolbar.add(jbtHelp = new JButton("Help"));

  // Set up called infoPanel
    infoPanel = new JPanel();
    infoPanel.add(jlblOne = new JLabel(currentStudent.toString(), JLabel.CENTER));

  // Set up colourPanel with radioButtons
    colourPanel = new JPanel(new GridLayout(2,1));
    colourPanel.add(bwRadioButton = new JRadioButton("Black & White", true));
    colourPanel.add(colourRadioButton = new JRadioButton("Colour"));
    btg = new ButtonGroup();
    btg.add(bwRadioButton);
    btg.add(colourRadioButton);
    // Put a TitledBorder around it
    colourPanel.setBorder(new TitledBorder("Colour"));

  // Set up noCopiesPanel
    noCopiesPanel = new JPanel(new GridLayout(1,2));
    noCopiesPanel.add(jlbCopies = new JLabel("Copies"));
    noCopiesPanel.add(jtfCopies = new JTextField(3));
    noCopiesPanel.setBorder(new TitledBorder("Print"));

    // Set up jbtPrint JButton
    jbtPrint = new JButton("Print",new ImageIcon("Images/printerIcon.png"));
    jbtPrint.setHorizontalTextPosition(JButton.CENTER);
    jbtPrint.setVerticalTextPosition(JButton.TOP);
    jbtPrint.setFont(new Font("Helvetica", Font.BOLD, 30));
    jbtPrint.setBackground(Color.LIGHT_GRAY);
    jbtPrint.setMnemonic('P');

    // Set up printerPanel
    printerPanel = new JPanel();
    String[] printerList = {"Printer 24001", "Printer 24002", "Printer 24003", "Printer 24004"};
    printerPanel.add(printerBox = new JComboBox(printerList));
    printerPanel.setBorder(new TitledBorder("Printers"));

  detailPanel = new JPanel(new GridLayout(2,1));
  detailPanel.add(infoPanel, BorderLayout.NORTH);
    detailPanel.add(colourPanel, BorderLayout.WEST);
    detailPanel.add(noCopiesPanel, BorderLayout.CENTER);
    detailPanel.add(jbtPrint, BorderLayout.EAST);
    detailPanel.add(printerPanel, BorderLayout.SOUTH);

  mainPanel = new JPanel();

  mainPanel.add(toolBarPanel, BorderLayout.NORTH);
    mainPanel.add(detailPanel, BorderLayout.SOUTH);
    this.add(mainPanel);
  //this.add(detailPanel);

Upvotes: 2

Views: 88

Answers (1)

Paul Samsotha
Paul Samsotha

Reputation: 208944

detailPanel = new JPanel(new GridLayout(2,1));
detailPanel.add(infoPanel, BorderLayout.NORTH);

You have the layout as GridLayout but you are trying to set BorderLayout positions. If you want to set the positions, set the layout of detailPanel to BorderLayout


mainPanel = new JPanel();
mainPanel.add(toolBarPanel, BorderLayout.NORTH);

Same as above with this case. JPanel has a default FlowLayout. You need to set the layout to BorderLayout.

You should also be adding the detailPanel to the CENTER of the mainPanel.


Also a JToolBar should be added to a container with a BorderLayout

toolBarPanel = new JPanel();
toolBarPanel.add(jToolbar = new JToolBar());

Set the toolBarPanel to BorderLayout

Upvotes: 3

Related Questions