Donnerstag, 19. Februar 2009

 

Swing und AWT mischen

Schüler zeigen mir immer wieder ihre Programme, die folgendes Verhalten an den Tag legen: das Menü verschwindet hinter den Steuerelementen:
Obiges Bild zeigt das Problem. Das geöffnete Menü verschwindet hinter dem TextField, ist aber vor dem unteren Textfeld. Das Verhalten des unteren Textfeldes passt, jenes des oberen passt nicht.
Es handelt sich hier um ein Swing-Formular, das mit Netbeans erstellt wurde. Für das obere Textfeld wurde AWT benutzt.
Für das untere Textfeld wurde Swing verwendet (Swing Controls).

Wichtig: bei Swing-Anwendungen immer Swing-Steuerelemente verwenden (beginnen alle mit J, also JFrame, JList, usw.). Bei AWT-Anwendungen nur AWT-Steuerelemente verwenden (Frame, List, usw.).

Der Grund liegt in der unterschiedlichen "Zeichenfunktion", AWT verwendet paint(), Swing immer paintComponent().

Bei den Variablendeklarationen sieht man das auch:

private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JTextField jTextField1;
private javax.swing.JPanel mainPanel;
private javax.swing.JMenuBar menuBar;
private javax.swing.JProgressBar progressBar;
private javax.swing.JLabel statusAnimationLabel;
private javax.swing.JLabel statusMessageLabel;
private javax.swing.JPanel statusPanel;
private java.awt.TextField textField1;


Die letzte Zeile enthält den "Übeltäter".

Will man "selbst" in einem Panel zeichnen, so macht man dies bei AWT mit:

import java.awt.Frame;
public class Fenster extends Frame {
//...
@Override
public void paint(Graphics g) {
//...
g.drawString("test", x, y);
//...
}

//...
}

Bei Swing (JPanel) muss man hingegen so vorgehen:

import javax.swing.JPanel;
public class GraphView extends JPanel {
//...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int maxx = 0; // für Panelgröße
int maxy = 0;
//...
g.drawString("test", x, y);
//...
}
//...
}

Beachten Sie, dass hier unbedingt super.paintComponent(g); aufgerufen werden muss.

Labels: ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]