Java Swing How to - Layout statusbar to the bottom with BorderLayout








Question

We would like to know how to layout statusbar to the bottom with BorderLayout.

Answer

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
//  w  ww  .  jav  a  2 s.  c o m
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Main extends JPanel {
  int PREF_W = 800;
  public Main() {
    JPanel buttonPanel = new JPanel();
    buttonPanel.add(new JButton("Foo"));
    buttonPanel.add(Box.createHorizontalStrut(10));
    buttonPanel.add(new JButton("Bar"));

    String[] columnNames = { "Mon", "Tues", "Wed" };
    DefaultTableModel model = new DefaultTableModel(columnNames, 25);
    JTable table = new JTable(model);
    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.getViewport().setPreferredSize(table.getPreferredSize());

    JLabel southLabel = new JLabel("OK!");
    southLabel.setForeground(Color.white);
    JPanel southPanel = new JPanel();
    southPanel.add(southLabel);

    setLayout(new BorderLayout(5, 5));
    add(buttonPanel, BorderLayout.NORTH);
    add(scrollPane, BorderLayout.CENTER);
    add(southPanel, BorderLayout.SOUTH);
  }

  public Dimension getPreferredSize() {
    Dimension superSize = super.getPreferredSize();
    int width = PREF_W > superSize.width ? PREF_W : superSize.width;
    return new Dimension(width, superSize.height);
  }

  public static void main(String[] args) {
    Main paintEg = new Main();

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(paintEg);
    frame.pack();
    frame.setVisible(true);
  }
}