Icon wird nicht angezeigt

Trolok

Mitglied
Mahlzeit hab ein kleines Problem ich versuche ein Fenster zu erschaffen mit einem Icon und Jbutton, das Fenster wird erstellt aber es ist grau <.< ich wette ist ein ganz kleiner Fehler sitze aber schon seit 3 Stunden dran:
Java:
public void run()
            {
                Welt welt=new Welt();
                welt.setWelt();
                welt.weltErschaffen();
            }
Java:
public class Welt extends JFrame
{
    private Icon[][] bilder = new Icon[3][7];
    private JButton[][][] button = new JButton[3][7][5];
    JFrame einFenster = new JFrame("Spiel");

    public void weltErschaffen()
    {
        Dimension d, g; 
        Point pos;
        d=Toolkit.getDefaultToolkit().getScreenSize();
        g=new Dimension(600,300);
        pos = new Point();
        pos.x=(d.width - g.width)/2;
        pos.y=(d.height- g.height)/2;       
        einFenster.setLocation(pos);
        einFenster.setSize(g);    
        einFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        einFenster.setVisible(true);

        Button start = new Button();
        start.start();
    }
   
    public void setWelt()
    {
        for(int i = 0;i<bilder[0].length;i++)
            {            
            bilder[0][i] = new ImageIcon("Bilder/"+i+".png);//es sind 7 Bilder 0-7            
            }}
           public Icon[][] getWelt()
           {
            return bilder;
            }
        public void setButton(JButton knopf, int raum, int bild, int zahl)
        {
            button[raum][bild][zahl]=knopf;           
        }      
        public JButton[][][] getButton()
        {
        
            return button;
        }
       
    public JFrame getWeltErschaffen()
    {
        return einFenster;
    }
    }

Java:
public class Button{
    Bild frame = new Bild();
    Welt welt = new Welt();
    public void start()
        {           
            Action starten = new Action();
            JButton start = new JButton("Spiel starten");
            start.setBounds(80,130,120,20);
            start.setActionCommand("1");
            start.addActionListener(starten);
            welt.setButton(start,0,0,0);
            frame.Frame(welt.getWelt(),welt.getButton(), 0,3);
        }
    }
Java:
public class Bild extends JFrame {
        Welt welt = new Welt();
public void Frame(Icon bilder[][],JButton button[][][], int raum, int bild) {        
        JLabel flache = new JLabel(bilder[raum][bild]);     
        
        for(int nummer=0; button[raum][bild][nummer]!=(null);nummer++)
        {
        flache.add(button[raum][bild][nummer]);        
        }
       welt.getWeltErschaffen().add(flache); 
        
        
    }
}
 
Ohne dein Programm wirklich verstanden zu haben, habe ich es jetzt mal so modifiziert, dass zumindest ein Bild im Zentrum des Fensters angezeigt wird (Koala.gif muss wieder raus). Hilft dir das weiter?
Java:
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Welt welt = new Welt();
        welt.setWelt();
        welt.weltErschaffen();
    }

    public static class Welt extends JFrame {

        private Icon[][] bilder = new Icon[3][7];
        private JButton[][][] button = new JButton[3][7][5];
        JFrame einFenster = new JFrame("Spiel");

        public void weltErschaffen() {
            einFenster.setLocationRelativeTo(null);
            einFenster.setSize(new Dimension(600, 300));
            einFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            einFenster.setVisible(true);

            Button start = new Button();
            start.start(this);
        }

        public void setWelt() {
            for (int i = 0; i < bilder[0].length; i++) {
                bilder[0][i] = new ImageIcon("Koala.gif");

            }
        }

        public Icon[][] getWelt() {
            return bilder;
        }

        public void setButton(JButton knopf, int raum, int bild, int zahl) {
            button[raum][bild][zahl] = knopf;
        }

        public JButton[][][] getButton() {

            return button;
        }

        public JFrame getWeltErschaffen() {
            return einFenster;
        }
    }

    public static class Button {

        Bild frame = new Bild();

        public void start(Welt welt) {
//            Action starten = new Action();
            JButton start = new JButton("Spiel starten");
            start.setBounds(80, 130, 120, 20);
            start.setActionCommand("1");
//            start.addActionListener(starten);
            welt.setButton(start, 0, 0, 0);
            frame.frame(welt.getWelt(), welt.getButton(), 0, 3, welt);
        }
    }

    public static class Bild extends JFrame {

        public void frame(Icon bilder[][], JButton button[][][], int raum, int bild, Welt welt) {
            JLabel flache = new JLabel(bilder[raum][bild]);

            for (int nummer = 0; button[raum][bild][nummer] != (null); nummer++) {
                flache.add(button[raum][bild][nummer]);
            }
            welt.getWeltErschaffen().add(flache);
        }
    }
}
 
kleine Erläuterung zum Programm es sind 5 Klassen
GameGUI
welt.setWelt(); es werden alle Bilder in array "bilder" gespeichert
welt.weltErschaffen(); ein Fenster wird generiert
Welt:
start.start(); nach dem ein Fenster generiert wurde, wird man in Klasse Button weitergeleitet
Button:
welt.setButton(start,0,0,0); Es wird ein Button generiert (start) und in button[0][0][0] abgespeichert
Bild:
nun wird man zu Bild weitergeleitet dort wird ein JLabel erstellt mit Icon bilder[0][0], durch die schleife werden alle Buttons der "flache" hinzugefügt und flache wird dem fenster hinzugefügt.

mehr sollte das Programm ned machen hoffe war verständlich
 
Wenn du "nur" mit einer Fläche arbeitest sollte das sich auch im Code wiederspiegeln und entsprechend die Buttons in einem 2D Array abgelegt werden. Wenn du das dritte Feld nur dazu brauchst die Buttons zu nummerieren, mach das lieber z.B. mit einer Wrapper-Klasse pro Button. Das erhöht das Verständnis für dich und für andere ungemein. Du könntest auch überlegen ob du die Arrays wirklich brauchst weil es schon sowas wie GridLayouts gibt in denen du die Komponenten "arrayartig" einfügen kannst.
 
naja das 3te Feld sollte später für Speicherfkt genutzt werden so dass quasie in ner text datei gespeichert wird welche buttons bereits gedrückt wurden, du hast bestimmt Recht man kann das alles sicher eleganter gestalten 😳 aber grad gehts mir mehr um das Mysterium des verschwundenen Bildes ???:L
 
Also falls diese Anweisung meinst:
Java:
Bild frame = new Bild();
Das Bild-Objekt das du da erstellst verwendest du ja nicht mehr weiter. Das wird dann einfach vom Garbage Collector geschluckt.
 
Du erstellst das Bild, rufst eine Methode auf dem Bild auf, danach wird es aber von keiner anderen Komponente mehr referenziert, daher verschwindet es.
 

Neue Themen


Zurück
Oben