package gui; import java.awt.*; import javax.swing.*; import javax.swing.border.BevelBorder; public class Statusbar extends JPanel { /** * */ private static final long serialVersionUID = 1L; // Array der Felder, um spaeter auf diese zugreifen zu koennen private StatusbarField[] fields; public Statusbar(int numFields) { fields = new StatusbarField[numFields]; // Der Einfachheit halber verwende ich hier // ein GridLayout. In der Praxis wuerde man // eventuell einen anderen LayoutManager // verwenden. setLayout(new GridLayout(1,numFields)); // Hinzufuegen der Felder for(int i=0; i<numFields; i++) { fields[i] = new StatusbarField(); add(fields[i]); } } // Methode, um den Text eines Feldes zu aendern public void setText(int num, String text) { fields[num].setText(text); fields[num].paintImmediately(fields[num].getVisibleRect()); } // Methode, um den Text eines Feldes auszulesen public String getText(int num) { return fields[num].getText(); } // Das eigentlich Feld: ein einfaches JLabel class StatusbarField extends JLabel { private static final long serialVersionUID = -8763845324779450119L; public StatusbarField() { // Der Rand, der das Ganze wie eine typische // Statusleiste erscheinen laesst setBorder(new BevelBorder(BevelBorder.LOWERED)); // Wichtiger als die Breite ist die Hoehe (hier: 18), // damit, ein leeres Feld genauso hoch ist wie eines // mit Text setPreferredSize(new Dimension(50,18)); // Font-Zuweisung, damit nicht die beim // Metal Look & Feel uebliche Fettschrift // verwendet wird setFont(new Font("Dialog", Font.PLAIN, 12)); } } }