Auf canvas zeichnen



  • Hallo,

    ich habe mich jetzt mal an Swing rangewagt und gleich eine Enttäuschung erlebt. Mein Code sieht so aus:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class fenstertest extends JFrame
    {
    	class CMeinWindowLauscher extends WindowAdapter
    	{	
    		public void windowClosing(WindowEvent e)
    		{
    			System.exit(0);
    		}
    	}
    
    	class MeinCanvas extends Canvas
    	{
    		MeinCanvas()
    		{
    			setBackground(Color.black);	
    		}
    
    		public void paint(Graphics g)
    		{
    			g.setColor(Color.red);
    			g.drawLine(150,0,150,300);
    			g.drawString("-3",0,162);
    		}
    	}
    
    	fenstertest(String titel)
    	{
    		super(titel);
    		getContentPane().setLayout(new FlowLayout());
    		MeinCanvas malflaeche = new MeinCanvas();
    		getContentPane().add(malflaeche);
    		addWindowListener(new CMeinWindowLauscher());
    
    	}
    
    	public static void main(String args[])
    	{
    		fenstertest Fenster = new fenstertest("Mein Test");
    		Fenster.pack();
    		Fenster.setSize(500,500);
    		Fenster.show();
    	}
    }
    

    Jetzt bleibt das Panel aber leer und es wird auch nicht der Hintergrund schwarz.
    Was mache ich falsch??



  • Komponenten (wie dein canvas) müssen die Methode getPreferredSize() überschreiben (am bestn auch noch getMaximumSize() und getMinimumSize() ) um mit dem Layout des Containers zu interagieren.



  • Danke das hat geholfen, jetzt geht es!!!1


  • Mod

    Canvas gehört zum AWT und der Rest zu Swing. Das sollte man niemals mischen, auch wenn es vielleicht geht. Wenn du das weiter so machst, dann wirst du früher oder später auf ganz unerklärliche Fehler stoßen. Besser wäre, wenn du statt einem Canvas eine JComponent nimmst.


Anmelden zum Antworten