Ich habe folgendes Programm. Es soll roten Text auf grünem Grund drucken. Wenn das Programm geöffnet wird, sehe ich nur den grünen Hintergrund, aber nicht den roten Text darauf. Sobald die Größe des Fensters geändert und neu berechnet wurde, erscheint der rote Text.Java Swing.JFrame zeichnet nur Inhalt auf die Größe des Fensters
Es funktioniert ordnungsgemäß, wenn ich ein JPanel innerhalb des Fensters verwenden und dort eine Komponente hinzufügen. Wenn die Farben in paintComponent eingestellt sind, funktioniert alles einwandfrei.
Also wo ist das Problem, wenn ich direkt auf den JFrame zeichne. Fehle ich ein erstes "Update" oder etwas? Es sieht so aus, als ob beim ersten Zeichnen des Fensters (dem zusätzlichen Text) einige Informationen fehlen, von denen das Programm erst erfährt, wenn das Fenster neu berechnet und neu gezeichnet wird.
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class PaintAWT extends JFrame {
PaintAWT() {
this.setSize(600, 400);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
// Set background color:
// If you don't paint the background, one can see the red text.
// If I use setBackground I only see a green window, until it is
// resized, then the red text appears on green ground
this.getContentPane().setBackground(new Color(0,255,0));
// Set color of text
g.setColor(new Color(255,0,0));
// Paint string
g.drawString("Test", 50, 50);
}
public static void main(String[] args) {
new PaintAWT();
}
}
Für den Anfang sollten Sie 'paintComponent' überschreiben, nicht' paint'. Und ich empfehle persönlich, ein 'JPanel' anstelle des' JFrame' zu verlängern. Sie müssen auch eine Möglichkeit haben, den Aufruf von 'repaint' zu steuern, da der Container durch die Logik von Swing normalerweise nur dann neu gezeichnet wird, wenn es erforderlich ist (z. B. wenn Sie die Größe des Fensters ändern). – Gorbles