GridLayout mit JLabel-Array füllen

Laiminator92

Mitglied
Guten Tag zusammen,

ich habe ein Problem beim Füllen meines GridLayout. Und zwar bekomme ich es einfach nicht hin ein JLabel-Array zu erstellen. Im Prinzip hatte ich vor das dann in jedem Label die Koordinaten des Kästchen steht, aber das ist momentan noch Nebensache. Erstmal möchte ich das er überhaupt Kästchen erstellt.

Hier mein Quellcode:
Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import java.io.*;

public class MapEdit implements ActionListener
{

    private JFrame frame = null;
    private JLabel raster[][];
    private JButton button1;
    private JTextField textfeld1, textfeld2;

    public MapEdit()
    {
        // Fenster anlegen
        frame = new JFrame();
        frame.setTitle("Größenangabe");
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Button anlegen
        this.textfeld1 = new JTextField("Wieviele Kacheln breit soll die Map sein?");
        textfeld1.addMouseListener(new java.awt.event.MouseAdapter()
        {
            public void mouseClicked(java.awt.event.MouseEvent evt)
            {
                textfeld1MouseClicked(evt);
            }
        });
        this.textfeld2 = new JTextField("Wieviele Kacheln hoch soll die Map sein?");
        textfeld2.addMouseListener(new java.awt.event.MouseAdapter()
        {
            public void mouseClicked(java.awt.event.MouseEvent evt)
            {
                textfeld2MouseClicked(evt);
            }
        });
        this.button1 = new JButton("OK");

        // Eventhandler für Button zuweisen
        this.button1.addActionListener(this);

        // Button der Frame hinzufügen
        frame.add(this.textfeld1,BorderLayout.NORTH);
        frame.add(this.textfeld2,BorderLayout.CENTER);
        frame.add(this.button1,BorderLayout.SOUTH);

        // Fenster zentrieren
        frame.setSize(350,100);
        frame.setLocationRelativeTo(null);

        // Fenster sichbar machen
        frame.setVisible(true);
    }
    
    private void textfeld1MouseClicked(java.awt.event.MouseEvent evt)
    {
       //Textfeld leeren
       textfeld1.setText("");
    }
    
    private void textfeld2MouseClicked(java.awt.event.MouseEvent evt)
    {
       //Textfeld leeren
       textfeld2.setText("");
    }
    
    private void button1Klick()
    {
        //Auslesen der Textfenster
        String breite = textfeld1.getText();
        int breit = Integer.parseInt(breite);
        String höhe = textfeld2.getText();
        int hoch = Integer.parseInt(höhe);
        //Ausgabe der Eingaben
        System.out.println(breit);
        System.out.println(hoch);
        
        //Fenstergröße und Fenstertyp ändern
        frame.setTitle("MapEditor");
        frame.remove(textfeld1);
        frame.remove(textfeld2);
        frame.remove(button1);
        frame.setSize(800,600);
        frame.setLayout(new GridLayout(breit,hoch,0,0));
        frame.setLocationRelativeTo(null);
        
        //Array zum Füllen des Rasters
        JLabel raster[][] = new JLabel[breit][hoch];
        frame.add(raster[][]);
    }

    public static void main(String[] args)
    {
        new MapEdit();
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(button1 == e.getSource())
        {
          //...wenn Button gedrückt
          button1Klick();
        }
    }
}

MfG,

Laiminator92
 

jgh

Top Contributor
bspw. so...du musst Variablen so deklarieren, dass sie -wenn diese außerhalb einer Methode auch benötigt werden- diese auch außerhalb, ggf. global deklariert werden...

Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import java.io.*;

public class MapEdit implements ActionListener {

	private JFrame frame = null;
	private JLabel raster[][];
	private JButton button1;
	private JTextField textfeld1, textfeld2;
	private int breit, hoch;

	public MapEdit() {
		// Fenster anlegen
		frame = new JFrame();
		frame.setTitle("Größenangabe");
		frame.setLayout(new BorderLayout());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Button anlegen
		this.textfeld1 = new JTextField(
				"Wieviele Kacheln breit soll die Map sein?");
		textfeld1.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				textfeld1MouseClicked(evt);
			}
		});
		this.textfeld2 = new JTextField(
				"Wieviele Kacheln hoch soll die Map sein?");
		textfeld2.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				textfeld2MouseClicked(evt);
			}
		});
		this.button1 = new JButton("OK");

		// Eventhandler für Button zuweisen
		this.button1.addActionListener(this);

		// Button der Frame hinzufügen
		frame.add(this.textfeld1, BorderLayout.NORTH);
		frame.add(this.textfeld2, BorderLayout.CENTER);
		frame.add(this.button1, BorderLayout.SOUTH);

		// Fenster zentrieren
		frame.setSize(350, 100);
		frame.setLocationRelativeTo(null);

		// Fenster sichbar machen
		frame.setVisible(true);
	}

	private void textfeld1MouseClicked(java.awt.event.MouseEvent evt) {
		// Textfeld leeren
		textfeld1.setText("");
	}

	private void textfeld2MouseClicked(java.awt.event.MouseEvent evt) {
		// Textfeld leeren
		textfeld2.setText("");
	}

	private void button1Klick() {
		// Auslesen der Textfenster
		String breite = textfeld1.getText();
		breit = Integer.parseInt(breite);
		String höhe = textfeld2.getText();
		hoch = Integer.parseInt(höhe);
		// Ausgabe der Eingaben
		System.out.println(breit);
		System.out.println(hoch);

		// Fenstergröße und Fenstertyp ändern
		frame.setTitle("MapEditor");
		frame.remove(textfeld1);
		frame.remove(textfeld2);
		frame.remove(button1);
		frame.setSize(800, 600);
		frame.setLayout(new GridLayout(breit, hoch, 0, 0));
		frame.setLocationRelativeTo(null);

		// Array zum Füllen des Rasters
		JLabel raster[][] = new JLabel[breit][hoch];
		for (int i = 0; i < raster.length; i++) {
			for (int j = 0; j < raster[i].length; j++) {
				raster[i][j] = new JLabel(i + " / " + j);
			}
		}
		for (int i = 0; i < raster.length; i++) {
			for (int j = 0; j < raster[i].length; j++) {
				frame.add(raster[i][j]);
			}
		}
	}

	public static void main(String[] args) {
		new MapEdit();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (button1 == e.getSource()) {
			// ...wenn Button gedrückt
			button1Klick();
		}
	}
}

[edit]und es langt nicht, ein JLabel-Array zu initialisieren, du musst es auch mit Werten füllen[/edit]

[ot][java=87]for (int i = 0; i < raster.length; i++) {
for (int j = 0; j < raster.length; j++) {
raster[j] = new JLabel(i + " / " + j);
raster[j].setBorder(BorderFactory.createBevelBorder(0));
}
}[/code]
macht das ganze optisch ein wenig hübscher...ok, geschmacksache ;)[/ot]
 
Zuletzt bearbeitet:

Crian

Top Contributor
Ich hab dir mal ein Beispiel gebastelt. Nun hast du natürlich schon eine Antwort *schmunzelt*

Aber mehrere schaden sicher nicht.

Java:
package forumProblems;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class MapEdit implements ActionListener {

    public class MyButton {
        private JButton button;
        private int xCoordinate;
        private int yCoordinate;
        public MyButton(JButton button, int x, int y) {
            this.button = button;
            xCoordinate = x;
            yCoordinate = y;
        }
        public JButton getButton() {
            return button;
        }
        public int getXCoordinate() {
            return xCoordinate;
        }
        public int getYCoordinate() {
            return yCoordinate;
        }
    }

    private JFrame frame = null;
    //private JLabel raster[][];
    private List<List<MyButton>> buttonList;
    private JButton button1;
    private JTextField textfeld1, textfeld2;

    public MapEdit() {
        // Fenster anlegen
        frame = new JFrame();
        frame.setTitle("Größenangabe");
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Button anlegen
        this.textfeld1 = new JTextField(
                "Wieviele Kacheln breit soll die Map sein?");
        textfeld1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                textfeld1MouseClicked(evt);
            }
        });
        this.textfeld2 = new JTextField(
                "Wieviele Kacheln hoch soll die Map sein?");
        textfeld2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                textfeld2MouseClicked(evt);
            }
        });
        this.button1 = new JButton("OK");

        // Eventhandler für Button zuweisen
        this.button1.addActionListener(this);

        // Button der Frame hinzufügen
        frame.add(this.textfeld1, BorderLayout.NORTH);
        frame.add(this.textfeld2, BorderLayout.CENTER);
        frame.add(this.button1, BorderLayout.SOUTH);

        // Fenster zentrieren
        frame.setSize(350, 100);
        frame.setLocationRelativeTo(null);

        // Fenster sichtbar machen
        frame.setVisible(true);
    }

    private void textfeld1MouseClicked(java.awt.event.MouseEvent evt) {
        // Textfeld leeren
        textfeld1.setText("");
    }

    private void textfeld2MouseClicked(java.awt.event.MouseEvent evt) {
        // Textfeld leeren
        textfeld2.setText("");
    }

    private void button1Klick()
    {
        //Auslesen der Textfenster
        String breite = textfeld1.getText();
        int breit = Integer.parseInt(breite);
        String höhe = textfeld2.getText();
        int hoch = Integer.parseInt(höhe);
        //Ausgabe der Eingaben
        System.out.println(breit);
        System.out.println(hoch);

        //Fenstergröße und Fenstertyp ändern
        frame.setTitle("MapEditor");
        frame.remove(textfeld1);
        frame.remove(textfeld2);
        frame.remove(button1);
        frame.setSize(800,600);
        frame.setLayout(new GridLayout(breit, hoch, 0, 0));
        frame.setLocationRelativeTo(null);

        //Array zum Füllen des Rasters
        buttonList = new ArrayList<List<MyButton>>();
        for (int y=1; y<=hoch; ++y) {
            List<MyButton> innerButtonList = new ArrayList<MyButton>();
            for (int x=1; x<=breit; ++x) {
                JButton button = new JButton("" + x + ", " + y);
                frame.add(button);
                MyButton myButton = new MyButton(button, x, y);
                innerButtonList.add(myButton);
            }
            buttonList.add(innerButtonList);
        }

        frame.repaint();

    }

    public static void main(String[] args) {
        new MapEdit();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (button1 == e.getSource()) {
            // ...wenn Button gedrückt
            button1Klick();
        }
    }
}

Generell würde ich für die Fragen zwei Label und zwei Textfelder bevorzugen, aber das hab ich mal unverändert gelassen.
 

Laiminator92

Mitglied
Danke erstmal für die Antworten, nun zu einer anderen Frage.
Ich habe versucht die Größe der einzelnen Labels festzusetzen, aber nicht so wirklich hinbekommen. Gibt es da irgendwelche besonderen Befehle bei GridLayout?
 

Crian

Top Contributor
Beim Gridlayout wird der Platz genau rasterförmig aufgeteilt. Du kannst das nur beeinflussen, indem du den Frame verkleinerst oder vergrößerst.
 

Laiminator92

Mitglied
Wie sieht es aus wenn ich in dem Fall das Layout auf Null setze...
Ich würde nämlich gerne die Felder genau auf 32,32 festlegen, da jedes meiner Bilder so groß ist.
 

jgh

Top Contributor
also ich kann dir nur vom Null-Layout abraten...das wird dir früher, oder später Probs bereiten!

Hier mal dein Bsp mit einer JScrollPane und JPanels, die JLabels haben immer die Größe 32x32 px, die Bezeichner und wahrscheinlich auch die Art und Weise wie sind allerdings nicht vorbidlhaft, aber sollte schnell gehen und ich muss mal wieder arbeiten :(

Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class MapEdit implements ActionListener {

	private JFrame frame = null;
	private JLabel raster[][];
	private JButton button1;
	private JTextField textfeld1, textfeld2;
	private int breit, hoch;

	public MapEdit() {
		// Fenster anlegen
		frame = new JFrame();
		frame.setTitle("Größenangabe");
		frame.setLayout(new BorderLayout());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Button anlegen
		this.textfeld1 = new JTextField(
				"Wieviele Kacheln breit soll die Map sein?");
		textfeld1.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				textfeld1MouseClicked(evt);
			}
		});
		this.textfeld2 = new JTextField(
				"Wieviele Kacheln hoch soll die Map sein?");
		textfeld2.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				textfeld2MouseClicked(evt);
			}
		});
		this.button1 = new JButton("OK");

		// Eventhandler für Button zuweisen
		this.button1.addActionListener(this);

		// Button der Frame hinzufügen
		frame.add(this.textfeld1, BorderLayout.NORTH);
		frame.add(this.textfeld2, BorderLayout.CENTER);
		frame.add(this.button1, BorderLayout.SOUTH);

		// Fenster zentrieren
		frame.setSize(350, 100);
		frame.setLocationRelativeTo(null);

		// Fenster sichbar machen
		frame.setVisible(true);
	}

	private void textfeld1MouseClicked(java.awt.event.MouseEvent evt) {
		// Textfeld leeren
		textfeld1.setText("");
	}

	private void textfeld2MouseClicked(java.awt.event.MouseEvent evt) {
		// Textfeld leeren
		textfeld2.setText("");
	}

	private void button1Klick() {
		// Auslesen der Textfenster
		String breite = textfeld1.getText();
		breit = Integer.parseInt(breite);
		String höhe = textfeld2.getText();
		hoch = Integer.parseInt(höhe);
		// Ausgabe der Eingaben
		System.out.println(breit);
		System.out.println(hoch);

		// Fenstergröße und Fenstertyp ändern
		frame.setTitle("MapEditor");
		frame.remove(textfeld1);
		frame.remove(textfeld2);
		frame.remove(button1);
		frame.setSize(800, 600);
		// frame.setLayout(new GridLayout(breit, hoch, 0, 0));
		frame.setLocationRelativeTo(null);

		// Array zum Füllen des Rasters
		raster = new JLabel[breit][hoch];
		for (int i = 0; i < raster.length; i++) {
			for (int j = 0; j < raster[i].length; j++) {
				raster[i][j] = new JLabel(i + " / " + j);
				raster[i][j].setBorder(BorderFactory.createBevelBorder(0));
				raster[i][j].setPreferredSize(new Dimension(32, 32));
			}
		}
		JPanel panel = new JPanel(new GridLayout(breit, hoch, 0, 0));
		for (int i = 0; i < raster.length; i++) {
			for (int j = 0; j < raster[i].length; j++) {
				JPanel p = new JPanel();
				raster[i][j].setBackground(Color.white);
				p.add(raster[i][j]);
				panel.add(p);
			}
		}
		JScrollPane jsp = new JScrollPane(panel);
		frame.add(jsp);
		frame.validate();
		frame.repaint();
	}

	public static void main(String[] args) {
		new MapEdit();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (button1 == e.getSource()) {
			// ...wenn Button gedrückt
			button1Klick();
		}
	}
}
 

Crian

Top Contributor
Ich hab hier ein Beispiel mit Nulldesign gebastelt:

Java:
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MapEdit2 {

    public class MyLabel {
        private JLabel label;
        private int xCoordinate;
        private int yCoordinate;
        public MyLabel(JLabel label, int x, int y) {
            this.label = label;
            this.xCoordinate = x;
            this.yCoordinate = y;
        }
        public JLabel getLabel() {
            return label;
        }
        public int getXCoordinate() {
            return xCoordinate;
        }
        public int getYCoordinate() {
            return yCoordinate;
        }
    }

    private JFrame frame;
    private List<List<MyLabel>> buttonList;
    private JTextField textfeld1, textfeld2;

    public MapEdit2() {
        // Fenster anlegen
        frame = new JFrame();
        frame.setTitle("Größenangabe");
        frame.setLayout(new GridBagLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets  = new Insets(0, 0, 0, 0);
        gbc.fill    = GridBagConstraints.BOTH;
        gbc.anchor  = GridBagConstraints.NORTHWEST;


        /* Breite: */
        {
            gbc.gridy   = 0;

            gbc.gridx   = 0;
            JLabel label = new JLabel(
                    "Wieviele Kacheln breit soll die Map sein?");
            frame.add(label, gbc);

            gbc.gridx   = 1;
            textfeld1 = new JTextField("", 3);
            frame.add(textfeld1, gbc);
        }

        /* Höhe: */
        {
            gbc.gridy   = 1;

            gbc.gridx   = 0;
            JLabel label = new JLabel(
                    "Wieviele Kacheln hoch soll die Map sein?");
            frame.add(label, gbc);

            gbc.gridx   = 1;
            textfeld2 = new JTextField("", 3);
            frame.add(textfeld2, gbc);
        }

        /* OK-Button: */
        {
            gbc.gridy   = 2;
            gbc.gridx   = 0;
            gbc.gridwidth = 2;
            JButton button = new JButton("OK");

            // Eventhandler für Button zuweisen
            button.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent event) {
                    //Auslesen der Textfenster
                    int breit = Integer.parseInt(textfeld1.getText());
                    int hoch  = Integer.parseInt(textfeld2.getText());

                    //Ausgabe der Eingaben
                    //System.out.println("Breite: " + breit);
                    //System.out.println("Hoehe : " + hoch);

                    erzeugeMap(breit, hoch);
                }
            });

            // Button der Frame hinzufügen
            frame.add(button, gbc);
        }

        // Fenster zentrieren
        frame.setSize(350, 100);
        frame.setLocationRelativeTo(null);

        // Fenster sichtbar machen
        frame.setVisible(true);
    }

    private void erzeugeMap(int breit, int hoch) {
        int fieldWidth  = 32;
        int fieldHeight = 32;

        //Fenstergröße und Fenstertyp ändern
        frame.setVisible(false);
        frame = new JFrame();
        frame.setTitle("MapEditor");
        int frameWidth = fieldWidth * breit + 50;
        int frameHeight = fieldHeight * hoch + 50;
        frame.setSize(frameWidth, frameHeight);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(null);

        //Array zum Füllen des Rasters
        buttonList = new ArrayList<List<MyLabel>>();
        for (int y=1; y<=hoch; ++y) {
            List<MyLabel> innerButtonList = new ArrayList<MyLabel>();
            for (int x=1; x<=breit; ++x) {
                JLabel label = new JLabel("" + x + "," + y);
                int fieldX = fieldWidth * (x-1);
                int fieldY = fieldHeight * (y-1);
                label.setBounds(fieldX, fieldY, fieldWidth, fieldHeight);
                if (x%2 == y%2) {
                    label.setBackground(Color.RED);
                }
                else {
                    label.setBackground(Color.BLUE);
                }
                label.setOpaque(true);
                panel.add(label);
                MyLabel myLabel = new MyLabel(label, x, y);
                innerButtonList.add(myLabel);
            }
            buttonList.add(innerButtonList);
        }

        frame.add(panel);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new MapEdit2();
    }

}
 

Laiminator92

Mitglied
Also wenn man das GridLayout verwendet hat man ja wieder Zwischenräume, da man ja nicht die Größe der einzelnen Rasterfelder verändert sondern nur die Größe die Felder die eingefügt werden oder sehe ich das falsch?

Und beim Layout(null) habe ich irgendwie das Problem keinen Scrollbalken einfügen zu können, wenn das Fenster mal größer als gedacht wird. Habe die Größe auf 800/600 wieder gestellt und dann sind ein paar Kästchen außerhalb, deswegen der Scrollbalken.
 

Crian

Top Contributor
Du kannst in meinem Beispiel den Panel natürlich mit Scrollbalken einfügen.

Edit: Leider bezieht sich der Scrollbalken dann nicht auf die dargestellten Kästchen, vermutlich ist das Null-Layout keine gute Idee. Ich bastel mal weiter.
 
Zuletzt bearbeitet:

Crian

Top Contributor
So vielleicht?

Java:
package forumProblems;


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class MapEdit3 {

    public class MyLabel {
        private JLabel label;
        private int xCoordinate;
        private int yCoordinate;
        public MyLabel(JLabel label, int x, int y) {
            this.label = label;
            this.xCoordinate = x;
            this.yCoordinate = y;
        }
        public JLabel getLabel() {
            return label;
        }
        public int getXCoordinate() {
            return xCoordinate;
        }
        public int getYCoordinate() {
            return yCoordinate;
        }
    }

    private JFrame frame;
    private List<List<MyLabel>> buttonList;
    private JTextField textfeld1, textfeld2;

    public MapEdit3() {
        // Fenster anlegen
        frame = new JFrame();
        frame.setTitle("Größenangabe");
        frame.setLayout(new GridBagLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets  = new Insets(0, 0, 0, 0);
        gbc.fill    = GridBagConstraints.BOTH;
        gbc.anchor  = GridBagConstraints.NORTHWEST;


        /* Breite: */
        {
            gbc.gridy   = 0;

            gbc.gridx   = 0;
            JLabel label = new JLabel(
                    "Wieviele Kacheln breit soll die Map sein?");
            frame.add(label, gbc);

            gbc.gridx   = 1;
            textfeld1 = new JTextField("", 3);
            frame.add(textfeld1, gbc);
        }

        /* Höhe: */
        {
            gbc.gridy   = 1;

            gbc.gridx   = 0;
            JLabel label = new JLabel(
                    "Wieviele Kacheln hoch soll die Map sein?");
            frame.add(label, gbc);

            gbc.gridx   = 1;
            textfeld2 = new JTextField("", 3);
            frame.add(textfeld2, gbc);
        }

        /* OK-Button: */
        {
            gbc.gridy   = 2;
            gbc.gridx   = 0;
            gbc.gridwidth = 2;
            JButton button = new JButton("OK");

            // Eventhandler für Button zuweisen
            button.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent event) {
                    //Auslesen der Textfenster
                    int breit = Integer.parseInt(textfeld1.getText());
                    int hoch  = Integer.parseInt(textfeld2.getText());

                    //Ausgabe der Eingaben
                    //System.out.println("Breite: " + breit);
                    //System.out.println("Hoehe : " + hoch);

                    erzeugeMap(breit, hoch);
                }
            });

            // Button der Frame hinzufügen
            frame.add(button, gbc);
        }

        // Fenster zentrieren
        frame.setSize(350, 100);
        frame.setLocationRelativeTo(null);

        // Fenster sichtbar machen
        frame.setVisible(true);
    }

    private void erzeugeMap(int breit, int hoch) {
        int fieldWidth  = 32;
        int fieldHeight = 32;

        //Fenstergröße und Fenstertyp ändern
        frame.setVisible(false);
        frame = new JFrame();
        frame.setTitle("MapEditor");
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(0, 0, 0, 0);
        gbc.fill   = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.NORTHWEST;

        //Array zum Füllen des Rasters
        buttonList = new ArrayList<List<MyLabel>>();
        for (int y=1; y<=hoch; ++y) {
            List<MyLabel> innerButtonList = new ArrayList<MyLabel>();
            gbc.gridy = y - 1;
            for (int x=1; x<=breit; ++x) {
                gbc.gridx = x - 1;
                JLabel label = new JLabel("" + x + "," + y);
                //int fieldX = fieldWidth * (x-1);
                //int fieldY = fieldHeight * (y-1);
                //label.setBounds(fieldX, fieldY, fieldWidth, fieldHeight);
                //label.setSize(fieldWidth, fieldHeight);
                label.setPreferredSize(new Dimension(fieldWidth, fieldHeight));
                if (x%2 == y%2) {
                    label.setBackground(Color.CYAN);
                }
                else {
                    label.setBackground(Color.GREEN);
                }
                label.setOpaque(true);
                panel.add(label, gbc);
                MyLabel myLabel = new MyLabel(label, x, y);
                innerButtonList.add(myLabel);
            }
            buttonList.add(innerButtonList);
        }

        JScrollPane scrollPane = new JScrollPane(panel,
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new MapEdit3();
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S 3 Fragen, Verzeichnis, GridLayout psoitionieren, Werte für JSpinner Java Basics - Anfänger-Themen 2
L GridLayout, Beispiel? Java Basics - Anfänger-Themen 2
S GridLayout Java Basics - Anfänger-Themen 7
T Inhalt Gridlayout wird nicht angezeigt Java Basics - Anfänger-Themen 6
F Seitenrand beim GridLayout Java Basics - Anfänger-Themen 3
J GridLayout auf Panel zentrieren? Java Basics - Anfänger-Themen 2
D Objekte manuell in GridLayout einfügen Java Basics - Anfänger-Themen 4
B GridLayout - elemente mit Maus abfragen Java Basics - Anfänger-Themen 3
A Textfields + Labels in GridLayout(3,2) Java Basics - Anfänger-Themen 2
V GridLayout - Spaltenbreite variabel ? Java Basics - Anfänger-Themen 5
Developer_X Java GridLayout nicht ganz ausgereift Java Basics - Anfänger-Themen 6
Developer_X GridLayout->setPreferedSize(new Dimension(x,y,)); Java Basics - Anfänger-Themen 17
J Verständnisfrage GridLayout Java Basics - Anfänger-Themen 5
G GridLayout Allgemeine Fragen Java Basics - Anfänger-Themen 2
G GridLayout Java Basics - Anfänger-Themen 12
T GridLayout % Verändern? Java Basics - Anfänger-Themen 3
G Gridlayout Java Basics - Anfänger-Themen 4
Q Frage zu GridLayout Java Basics - Anfänger-Themen 5
O größe von panel mit gridlayout Java Basics - Anfänger-Themen 9
B Null-Layout oder GridLayout usw. Java Basics - Anfänger-Themen 5
V GridLayout anpassen? Java Basics - Anfänger-Themen 6
R GridLayout ignoriert setSize() u.ä. Angaben Java Basics - Anfänger-Themen 2
R leeres Feld im GridLayout (dummy Objekt erzeugen?) Java Basics - Anfänger-Themen 2
J Auf einem JLabel Linien Malen Java Basics - Anfänger-Themen 1
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
J JLabel bzw. Image Icon mit KeyEvent bewgen Java Basics - Anfänger-Themen 9
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
JUNSKI Zeilenumbruch JLabel Java Basics - Anfänger-Themen 1
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
Tom/S JLabel Icon Farbe Java Basics - Anfänger-Themen 2
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
S Kontrollieren, ob ein Jlabel nicht sichtbar ist Java Basics - Anfänger-Themen 6
S Input/Output JLabel verschieben Java Basics - Anfänger-Themen 7
AnnaBauer21 GridBagLayout JLabel weightx: Unterschiedliche Breite mit & ohne Text Java Basics - Anfänger-Themen 6
CptK Interface JLabel bewegt sich nicht sondern teleportiert sich... Java Basics - Anfänger-Themen 3
CptK Methoden JLabel erstellen & verschieben Java Basics - Anfänger-Themen 1
T JLabel hat falsche größe Java Basics - Anfänger-Themen 1
A JLabel mit button drücken verändern Java Basics - Anfänger-Themen 6
CptK JLabel im Array Java Basics - Anfänger-Themen 2
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
P Auf JLabel zugreifen Java Basics - Anfänger-Themen 12
P Erste Schritte JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 4
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
M Vererbung Ein JLabel einer Elternklasse anzeigen Java Basics - Anfänger-Themen 8
D Klassen Wert aus JTextfield in JLabel (andere Klasse) darstellen. Java Basics - Anfänger-Themen 60
J Array in JLabel ausgeben Java Basics - Anfänger-Themen 2
S Variablen JLabel backImagePanel Fehlermeldung Java Basics - Anfänger-Themen 3
snipesss [Java] Schriftart und Schriftgröße von JLabel in einer Zeile festlegen? Java Basics - Anfänger-Themen 3
J JLabel cannot be resolved Java Basics - Anfänger-Themen 8
S JLabel sichtbar machen/GUI Java Basics - Anfänger-Themen 3
WetWer Animation JLabel Java Basics - Anfänger-Themen 2
W aus Methode auf JLabel zugreifen und Image verändern Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
L Variable für JLabel wird nicht erzeugt Java Basics - Anfänger-Themen 6
T Jlabel durch Text in 2 anderen Jlabels sichtbar machen Java Basics - Anfänger-Themen 4
T Objekt in ein JLabel der GUI übergeben Java Basics - Anfänger-Themen 3
S JLabel an Methode übergeben Java Basics - Anfänger-Themen 2
D Ausgabe über JLabel Java Basics - Anfänger-Themen 12
M Erste Schritte Wie speichert und gibt man Arrays aus? (JLabel) Java Basics - Anfänger-Themen 12
M Fangspiel-Probleme (JLabel, Objekt zurücksetzen) Java Basics - Anfänger-Themen 3
C Rechenaufgabe im JLabel ausrechnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
Z JLabel Icon ändern Java Basics - Anfänger-Themen 2
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
D JLabel ändern in actionperformed Java Basics - Anfänger-Themen 2
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
G drawString/ JLabel updaten Java Basics - Anfänger-Themen 1
G mouseDragged auf Jlabel Java Basics - Anfänger-Themen 2
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
M Frage zu JLabel Java Basics - Anfänger-Themen 5
T JLabel-Bilderpfad ändern... Java Basics - Anfänger-Themen 2
T JLabel anzeigen lassen... Java Basics - Anfänger-Themen 6
T Mein String in ein JLabel stecken Java Basics - Anfänger-Themen 2
Sogomn JLabel in anderer Klasse zum JFrame hinzufügen Java Basics - Anfänger-Themen 2
T JLabel zum klicken... Java Basics - Anfänger-Themen 15
W Datentypen String-Ausgabe in jLabel Java Basics - Anfänger-Themen 14
J JLabel Ausgabe Java Basics - Anfänger-Themen 3
B mouseClicked JLabel Array mitteilen Java Basics - Anfänger-Themen 6
L JLabel Icon Größe anpassen Java Basics - Anfänger-Themen 11
A Zeilenumbruch im Jlabel Java Basics - Anfänger-Themen 11
3 JLabel - Text in mehreren Zeilen zentrieren Java Basics - Anfänger-Themen 5
R JLabel imageicon jede Sekunde wechseln Java Basics - Anfänger-Themen 3
G GUI JLabel ersetzen Java Basics - Anfänger-Themen 3
M Zeilenumbruch in JLabel Java Basics - Anfänger-Themen 51
A Bildgröße automatisch auf JLabel Größe konvertieren Java Basics - Anfänger-Themen 9
S Text in einem JLabel nur zum Teil Fett Java Basics - Anfänger-Themen 2
B JLabel Text Formatierung Java Basics - Anfänger-Themen 5
J Bild auf JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 11
S NullPointerException bei zweidimensionalem JLabel-Array Java Basics - Anfänger-Themen 4
T JLabel richtig anordnen? wie gehts? Java Basics - Anfänger-Themen 9
SexyPenny90 JLabel Text und Icon untereinander verwenden Java Basics - Anfänger-Themen 3
B JLabel löschen/überschreiben Java Basics - Anfänger-Themen 10
P Netbeans Platform - JLabel und JPanel setLocation Problem Java Basics - Anfänger-Themen 2
A JLabel erst auf null dann auf einen Wert setzen Java Basics - Anfänger-Themen 7
F JLabel-Background Java Basics - Anfänger-Themen 7
T JLabel Farbe ändern, Problem Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben