AWT Canvas zeichnet nicht

Bitte aktiviere JavaScript!
Hey, ich möchte auf einem JFrame ein 20 x 20 Raster erzeugen und jede Zelle mit dem selben Bild füllen (Das Bild ist vorhanden, auch im richtigen Verzeichnis). Folgenden Quellcode verwende ich:
Java:
public void start1()
    {
        JFrame f1 = new JFrame();
        f1.setSize(500, 500);
        f1.setLocation(20, 20);
        for(int i = 0; i < 20; i++)
        {
            for(int e = 0; e < 20; e++)
            {
                int i1 = i;
                int e1 = e;
             
                f1.add(new Canvas() {
                    public void paint(Graphics g)
                    {
                        Toolkit t = Toolkit.getDefaultToolkit();
                        Image j = t.getImage("img/leer.png");
                        g.drawImage(j, i1*20, e1*20, this);
                    }
                });
        }
        }
        f1.setVisible(true);
    }
Ich bekomme aber nur ein leeres Fenster. Warum?

Alternativ habe ich folgenden Quellcode:
Java:
public void start2()
   {
       JFrame f1 = new JFrame();
       f1.setSize(500, 500);
       f1.setLocation(20, 20);
       JPanel p1 = new JPanel();
       p1.setLayout(new GridBagLayout());
       GridBagConstraints gbc = new GridBagConstraints();
       gbc.weightx = 20;
       gbc.weighty = 20;
       for(int i = 0; i < 20; i++)
       {
           for(int e = 0; e < 20; e++)
           {
               int i1 = i;
               int e1 = e;
               gbc.gridx = i1;
               gbc.gridy = e1;
               p1.add(new Canvas() {
                   public void paint(Graphics g)
                   {
                       
                       Toolkit t = Toolkit.getDefaultToolkit();
                       Image j = t.getImage("img/leer.png");
                       g.drawImage(j, 0, 0, this);
                   }
               },gbc);
           }
       }
       f1.add(p1);
       f1.setVisible(true);
   }
PS: Die notwendigen Bibliotheken habe ich importiert.
 
Zuletzt bearbeitet:
A

Anzeige




Vielleicht hilft dir unser Java-Tutorial hier weiter —> (hier klicken)
Canvas ist eine AWT-Komponente; die solltest Du nicht unbedingt in Swing-Anwendungen benutzen. Das aber nur nebenbei.

Du fügst Deine Komponente 400 mal in das JFrame ein - und zwar immer auf den gleichen "Fleck" (JFrame verwendet standardmäßig ein BorderLayout und add ohne Layout-Parameter fügt ins Zentrum ein).

Ich weiß nicht, was Du letztlich vorhast: wenn Du wirklich Komponenten haben willst, dann würde ich JLabel verwenden, das kann Bilder anzeigen (Du brauchst paint/paintComponent nicht zu überschreiben). Als Layout würde sich in dem Fall das GridLayout geradezu anbieten. Ich würde das Bild aber nur einmal laden und nicht 400-mal.

Wenn Du selbst eine Komponente bauen willst, die halt das Bild in einem 20x20-Gitter anzeigt, leite z. B. von JComponent ab, überschreibe getPreferredSize und paintComponent.
 
Meint ihr vielleicht setPreferredSize()? Das würde mir ja einleuchten, weil ich da ja einen neuen Wert setze. Mit getPreferredSize() lese ich den doch nur aus.
 
Meint ihr vielleicht setPreferredSize()? Das würde mir ja einleuchten, weil ich da ja einen neuen Wert setze
Kann auch sein, ich habe mihe7s Intention noch nich ganz genau verstanden....

Mit getPreferredSize() lese ich den doch nur aus
Überschreiben geht auch....

Genrell: Es gibt (leider) keine Swing Komponente schon fertig dafür....
Meherere Wege führen nach Rom. Weiterlesen:
https://stackoverflow.com/questions/36391104/how-to-create-this-grid-like-layout-with-column-and-row-labels
https://stackoverflow.com/questions/34036216/drawing-java-grid-using-swing
https://stackoverflow.com/questions/36380516/drawing-a-grid-in-a-jframe

Canvas scheint nicht unbedingt so falsch zu sein wie mihe7s Annahme. ;)
 
A

Anzeige




Hier lernst du alle wichtigen Java-Grundlagen.
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben