Namensraum | Vererbungshierarchie | Schnittstellen |
javax.swing | java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent JPanel |
Accessible ImageObserver MenuContainer Serializable |
Kurzbeschreibung |
Eine Instanz kann als Container für einfache Komponenten verwendet werden. JPanel ist außerdem eine geeignete Basisklasse für die Implementierung spezialisierter visueller Komponenten. |
Java SE 6 | http://docs.oracle.com/javase/6/docs/api/javax/swing/JPanel.html |
Java SE 7 | http://docs.oracle.com/javase/7/docs/api/javax/swing/JPanel.html |
Mit der Methode setBackground wird die Hintergrundfarbe eines Panels festgelegt. Die Hintergrundfarbe wird aber nur dann gezeichnet, wenn das Panel mit setOpaque(true); als deckend konfiguriert wird.
Um in ein Panel zu zeichnen, definieren abgeleitete Klassen die Methode paintComponent neu. Die erste Anweisung der neu definierten Methode sollte der Aufruf von paintComponent in der Basisklasse sein. Dieser Aufruf stellt sicher, dass der Hintergrund des Panels richtig gezeichnet wird.
Der Inhaltsbereich eines Panels wird mit repaint() zur Auffrischung angemeldet.
Vorlage für paintComponent, falls das Panel keinen Rand verwendet.
@Override public void paintComponent(Graphics arg) { super.paintComponent(arg); Dimension groesse = this.getSize(); Rectangle bereich = new Rectangle(groesse); Graphics2D g = (Graphics2D) arg; this.InhaltZeichnen(g, bereich); }
Vorlage für paintComponent, falls das Panel einen Rand verwendet.
@Override public void paintComponent(Graphics arg) { super.paintComponent(arg); Dimension groesse = this.getSize(); java.awt.Insets insets = this.getInsets(); Rectangle bereich = new Rectangle(insets.left, insets.top, groesse.width - (insets.left + insets.right), groesse.height - (insets.top + insets.bottom)); Graphics2D g = (Graphics2D) arg; this.InhaltZeichnen(g, bereich); }
Wenn das Panel mit einem Rand ausgestattet wurde, darf die Strichbreite des Zeicheninstruments in paintComponent nicht verändert werden. Die folgende Vorlage sollte in dieser Situation verwendet werden:
@Override public void paintComponent(Graphics arg) { super.paintComponent(arg); Dimension groesse = this.getSize(); java.awt.Insets insets = this.getInsets(); Rectangle bereich = new Rectangle(insets.left, insets.top, groesse.width - (insets.left + insets.right), groesse.height - (insets.top + insets.bottom)); Graphics2D g = (Graphics2D) arg; Stroke st = g.getStroke(); // Strichbreite speichern this.InhaltZeichnen(g, bereich); g.setStroke(st); // frühere Strichbreite wiederherstellen }