Use a BorderLayout
, add a component to the SOUTH
position, this will be resized horizontally automatically. Keep your label in the CENTER
position
Check out How to use BorderLayout for more details

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
public class StatusBarExample {
public static void main(String[] args) {
new StatusBarExample();
}
public StatusBarExample() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JPanel statusBar = new JPanel(new FlowLayout(FlowLayout.LEFT));
statusBar.setBorder(
new CompoundBorder(
new LineBorder(Color.DARK_GRAY),
new EmptyBorder(4, 4, 4, 4)));
final JLabel status = new JLabel();
statusBar.add(status);
JLabel content = new JLabel("Content in the middle");
content.setHorizontalAlignment(JLabel.CENTER);
final JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(content);
frame.add(statusBar, BorderLayout.SOUTH);
frame.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
status.setText(frame.getWidth() + "x" + frame.getHeight());
}
});
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}