# Karteneditor Problem



## Dagobert (12. Sep 2008)

Ich bin immer noch dabei mein kleinen Karteneditor zu bastel, nachdem ich längere Zeit nicht weiter gemacht habe, habe ich mich heute mal wieder dran gesetzt. Aber ich bekomme mein Problem immer noch nicht in den Griff, denn meine Hauptkarte wird nicht an korekter Position angezeigt, oder ehr da wo ich sie haben will.
Ich will sie in der freien Fläche des Fenster haben, aber ich bekomme z.B. überschneidungen mit der Toolbar.






Könnte mir jemand helfen dieses Prblem in den Griff zu bekommen???


```
private void createGUI(int width, int height){
		
		this.tiles = new HashMap<Integer, Tile>();
		// Menüleiste mit Elmenten wie Datei laden, zoom, u.a.
		menu = new JMenuBar();
		// Die vier Root-Menüs
		JMenu dateiMenu = new JMenu("Datei" , false);
		JMenu ansichtMenu = new JMenu("Ansicht", false);
		JMenu extraMenu = new JMenu("Extra", false);
		JMenu hilfeMenu = new JMenu("Hilfe", false);
		// Das Dateimenü
		JMenuItem ladenMenu = new JMenuItem("Laden");
		ladenMenu.addActionListener(this);
		dateiMenu.add(ladenMenu);
		
		JMenuItem speichernMenu = new JMenuItem("Speichern");
		speichernMenu.addActionListener(this);
		dateiMenu.add(speichernMenu);
		
		JMenuItem speicherUnterMenue = new JMenuItem("Speichern unter");
		speicherUnterMenue.addActionListener(this);
		dateiMenu.add(speicherUnterMenue);
		
		JMenuItem beendenMenu = new JMenuItem("Beenden");
		beendenMenu.addActionListener(this);
		dateiMenu.add(beendenMenu);
		// Das Ansichentmenü
		JMenuItem zoomH = new JMenuItem("Zoom+");
		zoomH.addActionListener(this);
		ansichtMenu.add(zoomH);
		
		JMenuItem zoomZ = new JMenuItem("Zoom-");
		zoomZ.addActionListener(this);
		ansichtMenu.add(zoomZ);
		
		JMenuItem standartGroese = new JMenuItem("Normal");
		standartGroese.addActionListener(this);
		ansichtMenu.add(standartGroese);
		// Das Extramenü
		JMenuItem update = new JMenuItem("Update");
		update.addActionListener(this);
		extraMenu.add(update);
		
		JMenuItem ueber = new JMenuItem("Über");
		ueber.addActionListener(this);
		extraMenu.add(ueber);
		// Das Hilfemenü
		JMenuItem hilfe = new JMenuItem("Hilfe");
		hilfe.addActionListener(this);
		hilfeMenu.add(hilfe);
		// Die Menüleiste mit den Untermenüs beleben
		menu.add(dateiMenu);
		menu.add(ansichtMenu);
		menu.add(extraMenu);
		menu.add(hilfeMenu);
		
		// Erstellen des Root Panels
		setPreferredSize(new Dimension(width, height));
		setSize(new Dimension(width, height));
		setLayout(new BorderLayout());
		// Toolbar mit Werkzeugen die man für den Editor braucht
		JToolBar tools = new JToolBar("Werkzeugleiste", JToolBar.HORIZONTAL);
		tools.setFloatable(false);
		tools.setPreferredSize(new Dimension(400, 30));
		add(tools, BorderLayout.NORTH);
		// Neue Karte Button
		JButton neu = new JButton("Neue Karte");
		neu.setPreferredSize(new Dimension(30,30));
		neu.setSize(new Dimension(30,30));
		neu.addActionListener(this);
		tools.add(neu);
		// Karte Laden Button
		JButton oeffnen = new JButton("Laden");
		oeffnen.setPreferredSize(new Dimension(30,30));
		oeffnen.setSize(new Dimension(30,30));
		oeffnen.addActionListener(this);
		tools.add(oeffnen);
		// Speicher Button
		JButton speichern = new JButton("Speichern");
		neu.setPreferredSize(new Dimension(30,30));
		neu.setSize(new Dimension(30,30));
		neu.addActionListener(this);
		tools.add(speichern);
		JButton zoomin = new JButton("Zoom+");
		zoomin.setSize(new Dimension(30,30));
		zoomin.addActionListener(this);
		tools.add(zoomin);
		JButton zoomout = new JButton("Zoom-");
		zoomout.setSize(new Dimension(30,30));
		zoomout.addActionListener(this);
		tools.add(zoomout);
		// Panels für die verfügbaren Tiles & Objekte
		JPanel tilesPanel = new JPanel();
		JPanel objectPanel = new JPanel();
		// Beide Panels in ein Tabb-Dingen :D
		JTabbedPane objectTabbed = new JTabbedPane();
		objectTabbed.setPreferredSize(new Dimension(200, 300));
		objectTabbed.addTab("Tiles", tilesPanel);
		objectTabbed.addTab("Objekte", objectPanel);
		// Tiles laden
		loadTiles();
		// Für jede Tile ein Button erstellen
		tilesButtons = new Vector<JButton>();
		for(int i = 0; i < tiles.size(); i++){
			JButton button = new JButton(new ImageIcon(tiles.get(i).getExampleImage()));
			button.setSize(new Dimension(50, 50));
			button.setPreferredSize(new Dimension(50, 50));
			button.setName(String.valueOf(i));
			button.addActionListener(this);
			tilesButtons.add(button);
			tilesPanel.add(button, FlowLayout.LEFT);
		}
		// Minikarte
		JPanel miniMap = new JPanel();
		miniMap.setBackground(Color.green);
		miniMap.setPreferredSize(new Dimension(190,190));
		// East Panel
		JPanel eastPanel = new JPanel();
		eastPanel.setPreferredSize(new Dimension(200,200));
		eastPanel.add(objectTabbed);
		eastPanel.add(miniMap);
		add(eastPanel, BorderLayout.EAST);
		
		// Dia Hauptkarte
		mapContainer = new Container();
//		mapContainer.setBounds(5, tools.getX()+ tools.getHeight()+5, 100, 100);
		mapContainer.setSize(new Dimension(100,100));
		mapContainer.addMouseListener(this);
		mapContainer.addMouseMotionListener(this);
		mapContainer.addMouseWheelListener(this);
		add(mapContainer, BorderLayout.CENTER);
		// Emulation des Displays
		display = new Rectangle2D.Double(mapContainer.getX() , mapContainer.getY(), mapContainer.getWidth(), mapContainer.getHeight());
		// Die verschiedenen Curser initalisieren
		standart = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
		invisible =
			Toolkit.getDefaultToolkit().createCustomCursor(
					Toolkit.getDefaultToolkit().getImage(""),
					new Point(0,0),
			"invisible");
		// Die Statusleiste
		status = new JPanel();
		status.setBackground(Color.red);
		add(status, BorderLayout.SOUTH);
		statusInfo = new JLabel("Keine Karte geöffnet");
		statusInfo.setDoubleBuffered(true);
		status.add(statusInfo);
		statusbar = new JProgressBar();
		statusbar.setVisible(false);
		status.add(statusbar);
		// Fenster erstellen
		frame = new JFrame();
		frame.setPreferredSize(new Dimension(width, height));
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		frame.setTitle("Map-Editor V. 1.1");
		frame.getContentPane().add(this);
		frame.pack();
		frame.setVisible(true);
		Thread t = new Thread(this);
		t.start();
		
		frame.setJMenuBar(menu);
	}
```

und warum darf der Beitragstitel nicht : "Problem mit Karteneditor Layout" heißten???

mfg. Dagobert


----------



## Dagobert (25. Sep 2008)

Ich habs immer noch nicht hinbekommen.
Kann mir denn keiner weiterhelfen.
Ich weis jetzt das meien Componente Pos(0/0) hast und LxB 0x0.
Aber wie machen ich der klar das die vom Borderlayout eine größe bekomme?

mfg. Dagobert


----------



## Marco13 (25. Sep 2008)

:autsch: sehr übersichtlich....

Ich nehme mal an, das, wo das Rechteck mit der "93" reingezeichnet wird, wird unerwünschterweise von der Toolbar überlappt!? Am besten wäre ein Stück compilierbarer code, aber ... wenn das, wo das "93" drin ist, ein JPanel ist, das im BorderLayout.CENTER liegt, sollte das eigentlich kein Problem sein.


----------



## Dagobert (25. Sep 2008)

Ja, aber die 93 hat damit nix zu tun... ^^
das nur die aktuelle FPS
in dem Rechteck soll später die Karte hineinkommen
aber stimmt es wird überlappt. Hinter dem Rechteck steckt noch ein Container der dafür sorgen soll das der Platz "reserviert" wird.
Aber der Container ist (0,0,0,0) groß wenn ich ihm nicht explizit eine Größe festlege.
Mein Problem ist halt eigentlich nur das sich das ganze Überlapt und ich das Layout so net hinbekomme das es sich net Überlappt

mfg. Dagobert


----------



## Marco13 (25. Sep 2008)

Du musst die Layouts und die Components richtig verschachteln (und das auch am besten im Code irgendwo deutlich machen.........)
Auf den ersten Blick sieht das jetzt so aus:
- ein JFrame, dessen ContentPane ein BorderLayout hat
- in der ContentPane im BorderLayout.NORTH die Toolbar
- in der ContentPane im BorderLayout.SOUTH die Statusbar
- in der ContentPane im BorderLayout.EAST ein JPanel mit GridLayout oder so, wo dann die TabbedPane und das grüne drin liegen
- in der ContentPane im BorderLayout.CENTER ein JPanel mit der eigentlichen Map drin


----------



## Dagobert (25. Sep 2008)

Jop das hast du Goldrichtig so erkannt XD
aber ich weiß immer noch net warum die Mitte net richtig ist... ich kriege das iwie einfach net hin^^


----------



## Marco13 (25. Sep 2008)

Compilierbares Beispiel...


----------



## Dagobert (28. Sep 2008)

So erstmal SORRY das es so lange gedauert hat, habe aber wenig Zeit gehabt.

Hier ist dann mal ein Beispiel (hab es so weit wies einfach möglich war auf die GUI reduziert):

```
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.text.DecimalFormat;
import java.util.*;
import java.util.zip.ZipFile;
import javax.imageio.ImageIO;
import javax.swing.*;

public class MapEditor extends JPanel{

	private String mapName; // Name der Karte
	private int mapWidth; // Gesamtlänge der Karte in cm
	private int mapHeight; // Gesamthöhe der Karte in cm

	// ///////////
	// Minimap //
	// ///////////

	private Rectangle2D minimapArea; // Minimapbereich auf dem Bildschirm
	private Container minimapContainer; // Container für die Minimap
	private BufferedImage minimapImg; // Bild der Minimap

	// //////////////////////////////
	// Graphische Anzeigeelemente //
	// //////////////////////////////

	private JFrame frame; // Das Hauptfenster
	private Container mapContainer; // Der Container der über der eigentlichen
									// Karte liegt
	private Rectangle2D.Double display;
	private Rectangle2D maparea; // Sichtbarer bereich
	private Vector<JButton> tilesButtons; // Zum Speichern der Buttones für die
											// Tiles
	private JPanel status; // Hier werden alle Statusinformationen eingefügt
	private JLabel statusInfo; // Hier wird die aktuelle Position, usw.
								// angegeben
	private JProgressBar statusbar; // Eine Statusbar die ggf. Statuse Anzeigt

	private JMenuBar menu; // Die Menüleiste

	public static void main(String[] argv) {
		new MapEditor(800, 600);
	}

	/**
	 * Erweiterter Konstruktor
	 * 
	 * @param width
	 *            , Länge des Panels
	 * @param height
	 *            , Höhe des Panels
	 */
	public MapEditor(int width, int height) {
		createGUI(width, height);
	}

	private void createObjects() {

		this.maparea = new Rectangle2D.Double(0, 0, 0, 0);
		this.minimapArea = maparea;
	}

	private void createGUI(int width, int height) {
		// Menüleiste mit Elmenten wie Datei laden, zoom, u.a.
		menu = new JMenuBar();
		// Die vier Root-Menüs
		JMenu dateiMenu = new JMenu("Datei", false);
		JMenu ansichtMenu = new JMenu("Ansicht", false);
		JMenu extraMenu = new JMenu("Extra", false);
		JMenu hilfeMenu = new JMenu("Hilfe", false);
		// Das Dateimenü
		JMenuItem ladenMenu = new JMenuItem("Laden");

		dateiMenu.add(ladenMenu);
		JMenuItem speichernMenu = new JMenuItem("Speichern");

		dateiMenu.add(speichernMenu);
		JMenuItem speicherUnterMenue = new JMenuItem("Speichern unter");

		dateiMenu.add(speicherUnterMenue);
		JMenuItem beendenMenu = new JMenuItem("Beenden");

		dateiMenu.add(beendenMenu);
		// Das Ansichentmenü
		JMenuItem zoomH = new JMenuItem("Zoom+");

		ansichtMenu.add(zoomH);
		JMenuItem zoomZ = new JMenuItem("Zoom-");

		ansichtMenu.add(zoomZ);
		JMenuItem standartGroese = new JMenuItem("Normal");

		ansichtMenu.add(standartGroese);
		// Das Extramenü
		JMenuItem update = new JMenuItem("Update");

		extraMenu.add(update);
		JMenuItem ueber = new JMenuItem("Über");

		extraMenu.add(ueber);
		// Das Hilfemenü
		JMenuItem hilfe = new JMenuItem("Hilfe");

		hilfeMenu.add(hilfe);
		// Die Menüleiste mit den Untermenüs beleben
		menu.add(dateiMenu);
		menu.add(ansichtMenu);
		menu.add(extraMenu);
		menu.add(hilfeMenu);

		// Erstellen des Root Panels
		setPreferredSize(new Dimension(width, height));
		setSize(new Dimension(width, height));
		setLayout(new BorderLayout());
		setBackground(Color.CYAN);
		// Toolbar mit Werkzeugen die man für den Editor braucht
		JToolBar tools = new JToolBar("Werkzeugleiste", JToolBar.HORIZONTAL);
		tools.setFloatable(false);
		tools.setPreferredSize(new Dimension(400, 30));
		add(tools, BorderLayout.NORTH);
		// Neue Karte Button
		JButton neu = new JButton("Neue Karte");
		neu.setPreferredSize(new Dimension(30, 30));
		neu.setSize(new Dimension(30, 30));

		tools.add(neu);
		// Karte Laden Button
		JButton oeffnen = new JButton("Laden");
		oeffnen.setPreferredSize(new Dimension(30, 30));
		oeffnen.setSize(new Dimension(30, 30));

		tools.add(oeffnen);
		// Speicher Button
		JButton speichern = new JButton("Speichern");
		neu.setPreferredSize(new Dimension(30, 30));
		neu.setSize(new Dimension(30, 30));

		tools.add(speichern);
		// ZoomeIn Button
		JButton zoomin = new JButton("Zoom+");
		zoomin.setSize(new Dimension(30, 30));

		tools.add(zoomin);
		// ZoomOut Button
		JButton zoomout = new JButton("Zoom-");
		zoomout.setSize(new Dimension(30, 30));

		tools.add(zoomout);
		// Panels für die verfügbaren Tiles & Objekte
		JPanel tilesPanel = new JPanel();
		JPanel objectPanel = new JPanel();
		// Beide Panels in ein Tabb-Dingen :D
		JTabbedPane objectTabbed = new JTabbedPane();
		objectTabbed.setPreferredSize(new Dimension(200, 300));
		objectTabbed.addTab("Tiles", tilesPanel);
		objectTabbed.addTab("Objekte", objectPanel);
		// Tiles laden

		// Für jede Tile ein Button erstellen
		tilesButtons = new Vector<JButton>();
		// Minikarte
		JPanel miniMap = new JPanel();
		miniMap.setBackground(Color.green);
		miniMap.setPreferredSize(new Dimension(180, 180));
		// East Panel
		JPanel eastPanel = new JPanel();
		eastPanel.setPreferredSize(new Dimension(200, 200));
		eastPanel.setMinimumSize(new Dimension(200, 200));
		eastPanel.add(objectTabbed);
		eastPanel.add(miniMap);
		add(eastPanel, BorderLayout.EAST);

		// Dia Hauptkarte
		mapContainer = new Container();
		mapContainer.setBackground(Color.blue);
		mapContainer.setSize(new Dimension(300, 300));
		System.out.println("Map:\nX: " + mapContainer.getX() + "\nY: "
				+ mapContainer.getY() + "\nB: " + mapContainer.getWidth()
				+ "\nH: " + mapContainer.getHeight());
		add(mapContainer, BorderLayout.CENTER);
		// Emulation des Displays
		display = new Rectangle2D.Double(mapContainer.getX(), mapContainer
				.getY(), mapContainer.getWidth(), mapContainer.getHeight());
		// Die Statusleiste
		status = new JPanel();
		status.setBackground(Color.red);
		add(status, BorderLayout.SOUTH);
		statusInfo = new JLabel("Keine Karte geöffnet");
		statusInfo.setDoubleBuffered(true);
		status.add(statusInfo);
		statusbar = new JProgressBar();
		statusbar.setVisible(false);
		status.add(statusbar);
		// Fenster erstellen
		frame = new JFrame();
		frame.setPreferredSize(new Dimension(width, height));
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		frame.setTitle("Map-Editor V. 1.1");
		frame.getContentPane().add(this);
		frame.pack();
		frame.setVisible(true);

		frame.setJMenuBar(menu);
	}
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.drawRect((int) display.getX(), (int) display.getY(), (int) display.getWidth(), (int) display.getHeight()); 
	}
}
```


----------



## Marco13 (1. Okt 2008)

Ja, auch sorry: Werde erst am Montag wieder an einem Rechner mit JDK sitzen....


----------



## Marco13 (4. Okt 2008)

Ja, die Klasse extendet JPanel, und von ihr üebrschreibst du auch paintComponent, und alles, was dort gezeichnet wird, beizieht sich auf die Haupklasse. Die enthält aber noch jede Menge andere Components. Statt dort irgendwie eine "display-emulation(!?!)" einzubauen, solltest du das JPanel, das die Karte zeichnet (d.h. das, von dem du paintComponent überschreibst) in den "mapContainer" legen. 

Sowas wie "setSize" aufzurufen bringt übrigens nichts, wenn man einen LayoutManager verwendet. Welchen LayoutManager du dann für den mapContainer verwendest, bleibt dir überlassen (wenn du unbedingt willst, kannst du "null" als LayoutManager setzen, und dann auch dein "mapPanel" mit setSize usw. verändern, aber das macht nur selten Sinn).

Ganz grob sowas

```
// Von [url]http://www.java-forum.org/de/viewtopic.php?p=452507#452507[/url]

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.text.DecimalFormat;
import java.util.*;
import java.util.zip.ZipFile;
import javax.imageio.ImageIO;
import javax.swing.*;

public class MapEditor extends JPanel{

   private String mapName; // Name der Karte
   private int mapWidth; // Gesamtlänge der Karte in cm
   private int mapHeight; // Gesamthöhe der Karte in cm

   // ///////////
   // Minimap //
   // ///////////

   private Rectangle2D minimapArea; // Minimapbereich auf dem Bildschirm
   private Container minimapContainer; // Container für die Minimap
   private BufferedImage minimapImg; // Bild der Minimap

   // //////////////////////////////
   // Graphische Anzeigeelemente //
   // //////////////////////////////

   private JFrame frame; // Das Hauptfenster
   private Container mapContainer; // Der Container der über der eigentlichen
                           // Karte liegt
   private Rectangle2D.Double display;
   private Rectangle2D maparea; // Sichtbarer bereich
   private Vector<JButton> tilesButtons; // Zum Speichern der Buttones für die
                                 // Tiles
   private JPanel status; // Hier werden alle Statusinformationen eingefügt
   private JLabel statusInfo; // Hier wird die aktuelle Position, usw.
                        // angegeben
   private JProgressBar statusbar; // Eine Statusbar die ggf. Statuse Anzeigt

   private JMenuBar menu; // Die Menüleiste

   public static void main(String[] argv) {
      new MapEditor(800, 600);
   }

   /**
    * Erweiterter Konstruktor
    *
    * @param width
    *            , Länge des Panels
    * @param height
    *            , Höhe des Panels
    */
   public MapEditor(int width, int height) {
      createGUI(width, height);
   }

   private void createObjects() {

      this.maparea = new Rectangle2D.Double(0, 0, 0, 0);
      this.minimapArea = maparea;
   }

   private void createGUI(int width, int height) {
      // Menüleiste mit Elmenten wie Datei laden, zoom, u.a.
      menu = new JMenuBar();
      // Die vier Root-Menüs
      JMenu dateiMenu = new JMenu("Datei", false);
      JMenu ansichtMenu = new JMenu("Ansicht", false);
      JMenu extraMenu = new JMenu("Extra", false);
      JMenu hilfeMenu = new JMenu("Hilfe", false);
      // Das Dateimenü
      JMenuItem ladenMenu = new JMenuItem("Laden");

      dateiMenu.add(ladenMenu);
      JMenuItem speichernMenu = new JMenuItem("Speichern");

      dateiMenu.add(speichernMenu);
      JMenuItem speicherUnterMenue = new JMenuItem("Speichern unter");

      dateiMenu.add(speicherUnterMenue);
      JMenuItem beendenMenu = new JMenuItem("Beenden");

      dateiMenu.add(beendenMenu);
      // Das Ansichentmenü
      JMenuItem zoomH = new JMenuItem("Zoom+");

      ansichtMenu.add(zoomH);
      JMenuItem zoomZ = new JMenuItem("Zoom-");

      ansichtMenu.add(zoomZ);
      JMenuItem standartGroese = new JMenuItem("Normal");

      ansichtMenu.add(standartGroese);
      // Das Extramenü
      JMenuItem update = new JMenuItem("Update");

      extraMenu.add(update);
      JMenuItem ueber = new JMenuItem("Über");

      extraMenu.add(ueber);
      // Das Hilfemenü
      JMenuItem hilfe = new JMenuItem("Hilfe");

      hilfeMenu.add(hilfe);
      // Die Menüleiste mit den Untermenüs beleben
      menu.add(dateiMenu);
      menu.add(ansichtMenu);
      menu.add(extraMenu);
      menu.add(hilfeMenu);

      // Erstellen des Root Panels
      setPreferredSize(new Dimension(width, height));
      setSize(new Dimension(width, height));
      setLayout(new BorderLayout());

      // Toolbar mit Werkzeugen die man für den Editor braucht
      JToolBar tools = new JToolBar("Werkzeugleiste", JToolBar.HORIZONTAL);
      tools.setFloatable(false);
      tools.setPreferredSize(new Dimension(400, 30));
      add(tools, BorderLayout.NORTH);
      // Neue Karte Button
      JButton neu = new JButton("Neue Karte");
      neu.setPreferredSize(new Dimension(30, 30));
      neu.setSize(new Dimension(30, 30));

      tools.add(neu);
      // Karte Laden Button
      JButton oeffnen = new JButton("Laden");
      oeffnen.setPreferredSize(new Dimension(30, 30));
      oeffnen.setSize(new Dimension(30, 30));

      tools.add(oeffnen);
      // Speicher Button
      JButton speichern = new JButton("Speichern");
      neu.setPreferredSize(new Dimension(30, 30));
      neu.setSize(new Dimension(30, 30));

      tools.add(speichern);
      // ZoomeIn Button
      JButton zoomin = new JButton("Zoom+");
      zoomin.setSize(new Dimension(30, 30));

      tools.add(zoomin);
      // ZoomOut Button
      JButton zoomout = new JButton("Zoom-");
      zoomout.setSize(new Dimension(30, 30));

      tools.add(zoomout);
      // Panels für die verfügbaren Tiles & Objekte
      JPanel tilesPanel = new JPanel();
      JPanel objectPanel = new JPanel();
      // Beide Panels in ein Tabb-Dingen :D
      JTabbedPane objectTabbed = new JTabbedPane();
      objectTabbed.setPreferredSize(new Dimension(200, 300));
      objectTabbed.addTab("Tiles", tilesPanel);
      objectTabbed.addTab("Objekte", objectPanel);
      // Tiles laden

      // Für jede Tile ein Button erstellen
      tilesButtons = new Vector<JButton>();
      // Minikarte
      JPanel miniMap = new JPanel();
      miniMap.setBackground(Color.green);
      miniMap.setPreferredSize(new Dimension(180, 180));
      // East Panel
      JPanel eastPanel = new JPanel();
      eastPanel.setPreferredSize(new Dimension(200, 200));
      eastPanel.setMinimumSize(new Dimension(200, 200));
      eastPanel.add(objectTabbed);
      eastPanel.add(miniMap);
      add(eastPanel, BorderLayout.EAST);

      // Dia Hauptkarte
      mapContainer = new JPanel();
      mapContainer.setLayout(new BorderLayout());// Oder welches auch immer...
      mapContainer.setBackground(Color.blue);
      //mapContainer.setSize(new Dimension(300, 300));
      //System.out.println("Map:\nX: " + mapContainer.getX() + "\nY: "
      //      + mapContainer.getY() + "\nB: " + mapContainer.getWidth()
      //      + "\nH: " + mapContainer.getHeight());
      add(mapContainer, BorderLayout.CENTER);

      // Erstelle das Panel, das KEINE anderen Panels enthält, sondern
      // NUR die Aufgabe hat, die Map zu zeichnen
      MapPanel mapPanel = new MapPanel();
      mapContainer.add(mapPanel);


      // Emulation des Displays
      display = new Rectangle2D.Double(mapContainer.getX(), mapContainer
            .getY(), mapContainer.getWidth(), mapContainer.getHeight());
      // Die Statusleiste
      status = new JPanel();
      status.setBackground(Color.red);
      add(status, BorderLayout.SOUTH);
      statusInfo = new JLabel("Keine Karte geöffnet");
      statusInfo.setDoubleBuffered(true);
      status.add(statusInfo);
      statusbar = new JProgressBar();
      statusbar.setVisible(false);
      status.add(statusbar);
      // Fenster erstellen
      frame = new JFrame();
      frame.setPreferredSize(new Dimension(width, height));
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setResizable(false);
      frame.setTitle("Map-Editor V. 1.1");
      frame.getContentPane().add(this);
      frame.pack();
      frame.setVisible(true);

      frame.setJMenuBar(menu);
   }
}

class MapPanel extends JPanel
{
   public void paintComponent(Graphics g) {
      super.paintComponent(g);
      //g.drawRect((int) display.getX(), (int) display.getY(), (int) display.getWidth(), (int) display.getHeight());
      g.drawString("Hello", 20, 20);
   }
}
```


----------



## Dagobert (19. Okt 2008)

Da ich momentarn wenig Zeit habe und mit Klausuren beschäftigt bin geht das gerade mal mehr oder weniger sehr schleppend vorran.
Ich habe jetzt versucht das Karte zeichnen in eine JPanel auszulagern und habe sie ins Center des BorderLayout gestellt:

```
// Dia Hauptkarte
		kartenBereich = new JPanel(){
			public void paintComponents(Graphics g) {
				super.paintComponents(g);
				System.out.println("Karte Zeichnen");
				g.setColor(Color.black);
				g.drawString("test", 10, 10);
				
				Tile temp;
				
				// Alle Tiles zeichnen, die im sichtbaren Bereich liegen
				for (int i = 0; i < setTiles.size(); i++) {
					temp = setTiles.get(i);
					if (temp.intersects(display)){
						g.drawImage(availableTiles.get(temp).getCurrentImage(), (int) (temp.getX()-display.getX()),(int) (temp.getY()-display.getY()), (int) temp.getWidth(), (int) temp.getHeight(), this);
					}
				}
				
				if(currentTile != null){
					g.drawImage(availableTiles.get(currentTile).getCurrentImage(), (int) (currentTile.getX()),(int) (currentTile.getY()), (int) currentTile.getWidth(), (int) currentTile.getHeight(), this);
					g.drawRect((int) (currentTile.getX()),(int) (currentTile.getY()), (int) currentTile.getWidth(), (int) currentTile.getHeight());
				}
				g.drawRect((int) display.getX(), (int) display.getY(), (int) display.getWidth(), (int) display.getHeight());
			}};
		
		kartenBereich.setBackground(Color.pink);
		add(kartenBereich, BorderLayout.CENTER);
		System.out.println(kartenBereich.getSize());
```
Die Zeichnenmethode wird auch aufgerufen, jedoch sehe ich den "test"-String nicht.
Und wie kann ich herrausfinden welche Größe das JPanel hat, denn wenn ich getSize aufrufe bekomme ich nur 0 herraus, aber ich brauche die größe des Kastens

mfg. Dagobert


----------



## Marco13 (19. Okt 2008)

Vermutlich wird er übermalt. Mach' das drawString mal ans Ende der paintComponent.


----------



## Dagobert (20. Okt 2008)

ok hab ich gemacht --> hat aber leider nicht viel gebracht  

aber mein größeres Problem ist erstmal wie komme ich an die größe des JPanels raus?

mfg. Dagobert


----------



## Fu3L (20. Okt 2008)

Dagobert hat gesagt.:
			
		

> ok hab ich gemacht --> hat aber leider nicht viel gebracht
> 
> aber mein größeres Problem ist erstmal wie komme ich an die größe des JPanels raus?
> 
> mfg. Dagobert



panel.getWidth()
panel.getHeight()

Bei mir funktioniert das...


----------



## Marco13 (20. Okt 2008)

Mit getWidth() und getHeight() ... Ansonsten poste compilierbaren code.


----------

