drawString wird beim starten des Programmes nicht ausgeführt

cu_mi

Mitglied
Hallo,
will meine Kenntnisse in Sachen GUI-Programmierung auffrischen und bis auf folgendes Problem gestoßen.
Ich habe ein JFrame und ein JWindow. Auf den JWindow soll ein Text gezeichnet werden. Beim Starten des Programms erscheint der Text nicht. Erst wenn ich die repaint-Methode des JWindow aufrufe wird der Text manchmal angezeigt. Als ich das Programm öfters hintereinander startete sah ich, dass manchmal der Text erscheint und manchmal nicht. Habt ihr eine Erklärung dafür?

Hier der Code:

Java:
import javax.swing.JFrame;
import javax.swing.JWindow;
/**
 * @author pc
 *
 */
public class Area extends JFrame{

	public Area() {
		/**try {
		Scanner scanner = new Scanner( new File("text.txt") );
	    while ( scanner.hasNextLine() )
		      System.out.println( scanner.nextLine() );
		scanner.close();
		}catch( FileNotFoundException f ) {
			
		}**/
		
		setTitle("JFrame mit setSize()");

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		setSize(300,200);
		setLocation(100,100);
		setVisible(true);
		
		SubArea window = new SubArea(this);
	    window.setSize(500,500);
	    window.setLocation(500,500);
	    window.setVisible(true);
	    //window.repaint();  
	    //Wenn das einkommentiert, dann wird bei
	    //Programmstart gezeichnet (aber auch nur manchma)
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	    new Area();

	}
}
Nun die zweite Klasse:
Java:
import javax.swing.JWindow;

/**
 * 
 */

/**
 * @author pc
 *
 */
public class SubArea extends JWindow{
	
	public SubArea(Frame frm) {
		super(frm);
	}
	  
	@Override
	public void paint( Graphics g )
	    {
		System.out.println("halloo");
	    super.paint( g );
	    g.drawString(new String("hallo"),50,50);
	    System.out.println("hallo1");
	  }

}
 
Eine Erklärung dafür habe ich nicht, aber man sollte grundsätzlich nicht die paint eines JFrames/Windows überschreiben. Besser ist man fügt in diese ein JPanel oder eine JComponent ein und überschreibt deren paintComponent(Graphics g)
 
Hi,
danke für die Hilfe. hmm dann werde ich das wohl so machen. Falls wer anders die Begründung für dieses Verhalten kennt, interessieren würde mich es immernoch.

Grüße
 
Also bei mir wird der Text immer angezeigt. Welche java version hast du, eventuell upgraden.
Ein Grund warum das nicht funktioniert könnte sein, weil du deine Area nicht auf dem EDT erstellst. Kannst es ja mal so probieren:
Java:
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable(){
        	public void run()
        	{
        		new Area();
        	}
        });
    }
Übrigens, die Klasse Area gibt es bereits in der Java API (Für Geometrie). Du solltest ein wenig kreativer sein und deinen Klassen sprechende Namen geben. Sprechend heisst, dass ich mir vorstellen kann was z.B in deinem Frame passiert wenn ich nur den Namen davon kenne.
 
Zuletzt bearbeitet:

Zurück
Oben