# GUI aktualisieren: repaint, validate, Fenstergröße ändern bringt nichts



## chacky (28. Feb 2009)

Hallo erstmal,

Ich bin gerade dabei ein kleines Spiel zu programmieren und habe aber Probleme bezüglich der GUI-Anzeige.
Buttons, Labels, TextFields werden beim Starten des Programms angezeigt.
Doch wenn es um Zeichnungen geht, wie "drawOval", drawPolygon" , "drawImage",
dann werden diese Graphicsobjekte nicht angezeigt.

Habe hier im Forum ähnliche Probleme gefunden, doch Lösungsvorschläge wie: validate(), repaint(); bringt bei mir nichts.
Auch das Ändern der Fenstergröße (Ziehen, Minimieren, Maximieren) bringt nichts.

Um zu Prüfen, ob "überhaupt" etwas gezeichnet wird, habe ich einen MausListener eingebaut (Funktioniert so wie das Klicken auf einen Button), der bei Klicken auf das GUI  meine "Zeichenmethode" jedesmal aufruft.
Ergebnis: Das Zeichnen der Graphicsobjekte funktioniert.
Doch wenn ich jetzt, nachdem ich etwas auf der GUI sehe, die Anwendung minimiere, maximiere oder wenn ein anderes Fenster vor meiner GUI aufpoppt, dann verschwindet alles wieder. Das ist außerst seltsam.
Erst wenn ich wieder auf die GUI klicke wodurch meine Zeichenmethode "DrawPanel" über "GitterNetzMap" aufgerufen wird, dann funktioniert es.
Aber wie gesagt: Dieses klicken auf die GUI sollte nur zum Testen für das Zeichnen da sein.

Hier ist der Quellcode meines Programms und hoffe ihr könnt mir dabei weiterhelfen. 
Die GUI wurde dabei mit Netbeans erstellt und ist deshalb etwas länger.
Sonst benutze ich zum Programmieren Eclipse:

[HIGHLIGHT="Java"]
public class Hauptprogramm {

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
            	 new wilkommen().setVisible(true);
            }
        });
    }
}[/HIGHLIGHT]

Um die GUI zu starten muss man auf "Neues Spiel starten" klicken.

[HIGHLIGHT="Java"]import java.awt.Graphics;

public class wilkommen extends javax.swing.JFrame {


    public wilkommen() {
        initComponents();
    }
	private static final long serialVersionUID = 4711L;
	public static GUI gui;
	public static Graphics g;

//unwichtiger Teil, unten ganz unten gehts weiter mit dem Buttons
	private void initComponents() {

        jFrame1 = new javax.swing.JFrame();
        jPanel3 = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jComboBox5 = new javax.swing.JComboBox();
        jButton4 = new javax.swing.JButton();
        jLabel8 = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Spieleinstellungen"));
        jLabel3.setText("Spielertyp:");
        jLabel2.setText("Spielername:");
        jLabel9.setText("Spielfeld:");

        jComboBox5.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Standard", "Random" }));
        jComboBox5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
            }
        });
        jButton4.setFont(new java.awt.Font("Tahoma", 1, 14));
        jButton4.setText("Beginnen");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {

            }
        });

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);



        jButton1.setText("Neues Spiel Starten");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, 
            		javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(29, 29, 29)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jButton2, javax.swing.GroupLayout.Alignment.LEADING, 
                    		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, 
                    		javax.swing.GroupLayout.DEFAULT_SIZE, 365, Short.MAX_VALUE)
                    .addComponent(jButton3, javax.swing.GroupLayout.Alignment.LEADING, 
                    		javax.swing.GroupLayout.PREFERRED_SIZE, 365, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 
                		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton2)
                .addGap(18, 18, 18)
                .addComponent(jButton3)
                .addContainerGap(26, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 442, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap()))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 324, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-450)/2, (screenSize.height-353)/2, 450, 353);
    }// </editor-fold>


//Neues Spiel starten und GUI öffnen
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                             
    	GUI gui = new GUI();
		g = gui.getGraphics();

		this.setVisible(false);   	
    	gui.setVisible(true);  
    	GitterNetzMap.NeuesSpielfeld();
    	gui.repaint();
    	gui.validate();
}                                        


    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JComboBox jComboBox2;
    private javax.swing.JComboBox jComboBox3;
    private javax.swing.JComboBox jComboBox4;
    public static javax.swing.JComboBox jComboBox5;
    private javax.swing.JFrame jFrame1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField3;
    private javax.swing.JTextField jTextField4;
    // End of variables declaration

}
[/HIGHLIGHT]

Nun folgen ein paar Hilfklassen und die Drawpanel Klasse fürs Zeichnen:

[HIGHLIGHT="Java"]import java.awt.*; 


public class DrawPanel extends Panel{


	private static final long serialVersionUID=1L;
	static int[]x = new int[6];
	static int[]y = new int[6];
	static Graphics g= wilkommen.g;


	public static Polygon init6Eck(int xpos, int ypos, int radius){
		for (int i=0; i<=5; i++){
			x_=(int) (xpos + radius *Math.cos( i* 2* Math.PI/6));
			y=(int) (ypos + radius *Math.sin( i* 2* Math.PI/6));
		}
		return new Polygon (x,y,6);
	}


	static Polygon p1= init6Eck(342,352,50);  

	static Polygon p2= init6Eck(417,395,50);
	static Polygon p3= init6Eck(492,438,50);
	static Polygon p4= init6Eck(567,481,50);


	public static void zeichnen(){
		g.drawPolygon(p1);
		g.drawPolygon(p2);
		g.drawPolygon(p3);
		g.drawPolygon(p4);
		g.drawOval(100, 200, 100, 100);
	}

}
[/HIGHLIGHT]

[HIGHLIGHT="Java"]public class CanvasObjekt {
	int x;
	int y;

	public CanvasObjekt(int x, int y){

	}
}
[/HIGHLIGHT]

[HIGHLIGHT="Java"]import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

class Mauslistener extends MouseAdapter
  { 	  
	   int x =0 ; 
	   int y =0 ; 

       public void mousePressed(MouseEvent m){}

       public void mouseReleased(MouseEvent m){
    	      x = m.getX();
    	      y = m.getY(); 
    	      System.out.println("x = " + x + " y = " + y);
    	      GitterNetzMap.Mauseingabe(x,y);   	   
       }    
    }[/HIGHLIGHT]

[HIGHLIGHT="Java"]
public class GitterNetzMap {

	public static void NeuesSpielfeld(){	
		DrawPanel.zeichnen();
	}; 


	public static void Mauseingabe(int x,int y){
	     NeuesSpielfeld();
	}

};
[/HIGHLIGHT]

Hier die GUI:
[HIGHLIGHT="Java"]

	public class GUI extends javax.swing.JFrame {

	    public GUI() {
	        initComponents();
		    addMouseListener(new Mauslistener());		    
	    }

	    private static final long serialVersionUID = 1L;

	    private void initComponents() {

        jPanel2 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 652, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 613, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 
                		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 
                		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 
                    		javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }

    // Variables declaration - do not modify

    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;


    // End of variables declaration

}
[/HIGHLIGHT]


So, das Programm wurde an vielen Teilen gekürzt, sodass Buttons nicht richt bzw gar nicht angezeigt werden. Aber wie gesagt, es geht ja um das Zeichnen bzw. Anzeigen auf der GUI.
Um das Neuzeichnen mit Mausklick zu verhindern, müsst ihr in die Klasse "GitterNetzMap" gehen und einfach in der Methode "Mauseingabe" Neuesspiel() auskommentieren.

Ich hoffe ihr könnt mir helfen.

Gruß chacky_


----------



## diggaa1984 (28. Feb 2009)

es wäre vielleicht günstig das DrawPanel auch zu instanziieren und aufs Frame zu legen,wenn du schon von JPanel erbst .. sowas zeichnet sich dann auch neu wenn es nötig ist 

weiterhin, klassennamen gross schreiben, und keine englisch und deutsch mixen (gitternatzmap, mauslistener .. etc. das liest sich anstrengend) und auch generell gibts da ziemliche verwirrung bei: 

willkommen extends JFrame .. darin ein member jFrame1 ... dann die Klasse GUI als JFrame .. wie wo was is denn da wo drauf!?

eigentlich sollte 1 JFrame reichen 
und weniger static machen ^^


----------



## chacky (28. Feb 2009)

Hi

danke für die Tips. Das mit dem englisch-deutsch MischMasch, sollte ich mir mal abgewöhnen.
Aber nun zu den eigentlichen Vorschlägen:

Zum JFrame:
Undzwar hat die Klasse willkommen einen JFrame1, weil es eigentlich noch ein Fenster öffnen sollte, welches erst dann die GUI öffnet.
Doch die Anzeige des Fensters habe ich in dem Test-Programm jetzt entfernt, da der Quellcode für das Forum zu lang war.
Meinst du außerdem, das es im Programm generell nur ein JFrame geben sollte?

Zum Programmablauf:
Wilkommen wird aufgerufen und mit dem Klicken auf "Neues Spiel Starten" bekommt er das Graphics() von der GUI.
Dann wird die über Umwege DrawPanel aufgerufen, welches auf das JFrame der GUI zeichnen soll.
In meiner originalen Version wird halt wie gesagt, mit dem Klicken auf den Button ein neues Fenster, undzwar JFrame1 geöffnet. Dort muss ich mit dem Button "beginnen" bestätigen, das die GUI gestartet wird.

Und das mit dem instanzieren sagt mir jetzt nicht soviel.

was ich jetzt geändert habe ist die Klasse DrawPanel, undzwar das es nicth mehr von Panel sondern vom Frame erbt
[HIGHLIGHT="Java"]import java.awt.*; 


public class DrawPanel extends Frame{


	private static final long serialVersionUID=1L;
	static int[]x = new int[6];
	static int[]y = new int[6];
	static Graphics g= wilkommen.g;
.
.
.
}[/HIGHLIGHT]

Zum vielen Static:
Irgendwie verlangt das Eclipse immer, und ich nehme die Tips davon einfach an^^


----------



## diggaa1984 (28. Feb 2009)

ok mal ein simpler Beispielcode der in etwas das ausdrückt wie ich vorgehen würde

zum anwerfen
[HIGHLIGHT="Java"]
public class MyGameApplication {

    public static void main(String[] args) {
        //ich verzichte mal bewusst auf "invokeLater" .. aber hast du schon richtig gemacht
        MyMainFrame mf = new MyMainFrame("Spiel XY");
    }
}[/HIGHLIGHT]

hauptfenster mit Menüführung (zum Starten .. damit umgehst den "neue Fenster"-Kram .. obs dir gefällt steht auf einem anderen blatt )
[HIGHLIGHT="Java"]
public class MyMainFrame extends JFrame {

    public MyMainFrame(String title) {
        super(title);
        setup();
    }


    private void setup() {
        //exemplarisch als alleinige komponente .. sonst panel auf dem panel-strategie
        DrawPanel dp = new DrawPanel(); // <--- instanziieren
        this.add(dp);  //aufs JFrame legen
        this.setJMenuBar(setupMenuBar());
    }


    private JMenuBar setupMenuBar() {
        //TODO: Menu aufbauen und Listener ranhängen
        JMenuItem startGame = new JMenuItem("starte Spiel");
        startGame. addActionListener(new ActionListener {

            public void actionePerformed(ActionEvent e) {
                //TODO: Spielwelt initialisieren, Daten aufbauen irgendwas um den Startzustand 
                //des Spiels herzustellen
                //im idealfall anstossen einer Methode damit hier nicht zuviel Code lagert !!!!
            }
        });

        JMenu game = new JMenu("Spiel");
        m.add(startGame);

        JMenuBar mbar = new JMenuBar();
        mbar.add(game);

        return mbar;
    }
}[/HIGHLIGHT]

DrawPanel als JPanel auf dem gezeichnet wird
[HIGHLIGHT="Java"]
public class DrawPanel extends JPanel {

    // wo du hier die Daten hernimmst zum zeichnen etc. steht wieder auf nem andern Blatt

    @Override
    protected void paintComponent(Graphics g) {
        //TODO: hier dein zeichenkram ... was drauf soll ... Graphics-Objekt bekommst hier 
        //also schon gegeben
    }
}
[/HIGHLIGHT]

Das nun eben so hingehackt ohne Gewähr, aber auch ohne Funktion im eigenltichen Sinne, weil nur nen Panel auf dem Frame liegt .. nichts spektakuläres ^^


----------



## Marco13 (28. Feb 2009)

public static Graphics g;
....
g = gui.getGraphics();

Schade dass es das " :autsch: "-Smiley nicht mehr gibt....

LESEN: http:/showthread.php?t=43939&highlight=Zeichnen+Swing+Tutorial


----------



## chacky (28. Feb 2009)

Hi nochmal

also so wie ich das jetzt verstanden habe, geht es nur mit "paintComponent(Graphics g)",
wo dann sozusagen das Graphics Objekt in der Parameterklammer das getGraphics ersetzt, was ich ja momentan verwende?

Aufjedenfall hab ich etwas rumprobiert und das ganze funktioniert auch, nur finde ich kann man damit nicht so effizient arbeiten. Außerdem kann ich mit "Graphics g" z.B keine Variablen und Strings verwenden, aber erst einmal zum Veränderten Programmcode.

DrawPanel sieht nun so aus:
[HIGHLIGHT="Java"]import java.awt.*; 
import javax.swing.JComponent;


public class DrawPanel extends JComponent{

	static int[]x = new int[6];
	static int[]y = new int[6];
	private static final long serialVersionUID=1L;


	public static Polygon init6Eck(int xpos, int ypos, int radius){
		for (int i=0; i<=5; i++){
			x_=(int) (xpos + radius *Math.cos( i* 2* Math.PI/6));
			y=(int) (ypos + radius *Math.sin( i* 2* Math.PI/6));
		}
		return new Polygon (x,y,6);
	}


	static Polygon p1= init6Eck(342,352,50);  
	static Polygon p2= init6Eck(417,395,50);
	static Polygon p3= init6Eck(492,438,50);

protected void paintComponent (Graphics g){
	//super.paintComponent(g);
	g.setColor(Color.black);

	g.drawPolygon(p1);
	g.drawPolygon(p2);
	g.drawPolygon(p3);

}
}[/HIGHLIGHT]
public class DrawPanel extends Panel war nicht erlaubt, deshalb JComponent.


und in der GUI rufe ich nun paintComponent auf
[HIGHLIGHT="Java"]import java.awt.Graphics;

	public class GUI extends javax.swing.JFrame {
              public GUI() {
	        initComponents();
		    addMouseListener(new Mauslistener());

	    }
	    static DrawPanel zeichnen = new DrawPanel();

	    private static final long serialVersionUID = 1L;

	    private void initComponents() {

        jPanel2 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 652, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 613, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 
                		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 
                		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 
                    		javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 
                    		javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        pack();
    }



         public void paint(Graphics g){        
	      	zeichnen.paintComponent(g);
	    }


    // Variables declaration - do not modify

    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;


    // End of variables declaration

}[/HIGHLIGHT]

Ist es auch möglich zu zeichnen ohne paint(Graphics g) aufzurufen?
Denn genau das finde ich problematisch.
Denn möchte ich die Methode in paintComponent im DrawPanel über eine andere Klasse aufrufen, so hab ich bisjetzt noch keine Lösung gefunden, wie ich ein Graphics Objekt übergebe

[HIGHLIGHT="Java"]public class GitterNetzMap {

	public static void NeuesSpielfeld(){	
		DrawPanel.paintComponent(g); <-- Wie rufe ich hier paintComponent auf?
	}; 


	public static void Mauseingabe(int x,int y){
	     NeuesSpielfeld();
	}

};[/HIGHLIGHT]

DrawPanel.paintComponent(g) kann so ja nicht gehen. Mit getGraphics von der GUI geht es nicht bzw soll man ja in dem Fall nicht verwenden.
Wie wird nun etwas auf der GUI angezeigt, wenn ich aus der GUI
[HIGHLIGHT="Java"]         public void paint(Graphics g){        
	      	zeichnen.paintComponent(g);
	    }[/HIGHLIGHT]
entferne?


Außerdem habe ich mal versucht in die Parameterklammer von paintComponent zwei Strings und zwei Int- Werte (Koordinaten) übergeben:

paintComponent(Graphics g,String Objekt, String Eigenschaft, int x, int y);
doch das funktioniert auch nicht.

Ihr fragt euch bestimmt, warum ich das mache mit den Strings und Int-Werten:
Undzwar habe ich in meinem Programm eine Klasse, die auf die Zeichenmethode aus DrawPanel zugreift und ihr dabei die Koordinaten fürs Zeichnen übergibt und sagt, was für ein Bild geladen und gezeichnet werden soll. 
Doch nun bin ich überfragt, wie ich paintComponents in Kombination mit Parameterübergaben realisieren soll.
Hier mein ursprüngliches DrawPanel, was ich momentan verwende
[HIGHLIGHT="Java"]import java.awt.*; 
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;



public class DrawPanel extends Panel{


	private static final long serialVersionUID=1L;
	static int[]x = new int[6];
	static int[]y = new int[6];
	static Graphics g= wilkommen.g;

	public static Polygon init6Eck(int xpos, int ypos, int radius){
		for (int i=0; i<=5; i++){
			x=(int) (xpos + radius *Math.cos( i* 2* Math.PI/6));
			y=(int) (ypos + radius *Math.sin( i* 2* Math.PI/6));
		}
		return new Polygon (x,y,6);
	}


	public static void Empfange(String Objekt, String Eigenschaft, int x, int y){
		if (Objekt=="Feld"){
			Polygon P =init6Eck(x,y,51);
			g.setColor(Color.black);
			g.drawPolygon(P);
			BufferedImage bild = Rohstofffeld(Eigenschaft);
			g.setClip(P);
			g.drawImage(bild,x-50,y-45,wilkommen.gui); 

		}
	}

//Liest Bilder ein
public static BufferedImage Rohstofffeld(String Typ) {
	BufferedImage img1 = null;


	if (Typ.equals("Stadt")){
		try{
			img1= ImageIO.read(new File ("Dateipfad.Bilddatei"));

		}
		catch ( IOException e ) { e.printStackTrace(); } 
	}
	if (Typ.equals("Haus")){
		try{
			img1= ImageIO.read(new File ("Dateipfad.Bilddatei"));

		}
		catch ( IOException e ) { e.printStackTrace(); } 
	}
	return img1;
	}

}[/HIGHLIGHT]

Wie ihr seht wird in Emfange gezeichnet. Undzwar wird ein Polygon mit den übergebenen Koordinaten gezeichnet und auf dieses Polygon wird ein Bild eingefügt mit den Umrissen des Polygons.
Würde ich jetzt statt 
"public static void Empfange(String Objekt, String Eigenschaft, int x, int y)"
nun
"public void paintComponent(Graphics g,String Objekt, String Eigenschaft, int x, int y)"
wie übergebe ich dann das Graphics Objekt?

Das ganze hört sich bestimmt etwas verwirrend an, aber vielleicht versteht ihr was ich meine, wenn nicht einfach schreien _


----------



## diggaa1984 (1. Mrz 2009)

puh also:

DrawPanel extends JPanel muss gehen (eventuell importieren der klasse, die imports habsch alle weggelassen .. hast du ja selbst in der ersten version auch), sofern du von JPanel erbst, sollte auch das _super.paintComponent(g)_ bleiben, das gehört zum Polymorphismus dazu .. erst die Arbeit der Oberklasse, dann deine Eigene



> und in der GUI rufe ich nun paintComponent auf


*solltest du nie benötigen*, das painComponent wird durch das Framework selbst bei Bedarf aufgerufen .. sodass wenn nötig sich dein Panel neu zeichnet mit den Aktionen die du in paintComponent verstaust



> Ist es auch möglich zu zeichnen ohne paint(Graphics g) aufzurufen?


siehe oben, sollte nicht nötig sein derart zu agieren, du hast bei meinem Beispiel etwas übersehen, und zwar *adde ich das DrawPanel (in deinem Fall zeichnen) dem JFrame dazu* (2. codeblock 12. Zeile), also ich setze dieses Panel auf die JFrame-Oberfläche, sodass dann auch das Panel gezeichnet wird, wenn es für nötig befunden wird. DAS musst du auch machen und deine Probleme lösen sich zu 90% in Luft auf.
Dich wird das alles ein wenig verwirren, da du dort Tonnen von generiertem Code hast, Fakt ist, du musst in der GUI-klasse in der initComponents dein DrawPanel analog meinem Vorgehen erzeugen (kein static) und dann adden. Problematisch könnte eben sein das hier automatisch mit dem Layout code generiert wird und du nicht direkt siehst wos reinkommt.

aeh da ich nicht weiss wozu jPanel1 und 2 dienen in GUI kann ich dir auch net sagen wo das hinzuschreiben wäre, aber ich kann dir nur empfehlen dich selbst mit einem LayoutManager vertraut zu machen, dann kannst da unten locker 30 zeilen wegschmeissen, und es wird durch eigenen Code viel lesbarer.

painMethode sollte raus können
GitterNetzMap ruft keine paintComponent mehr auf

EDIT: Ich seh grad, du erbst in deiner Version von DrawPanel von der Klasse Panel .. besser wäre JPanel (sind 2. versch. Dinge .. das eine ist AWT das andere Swing)


----------



## chacky (1. Mrz 2009)

Hi

nochmals danke für die Zeit, die du dir genommen hast. So langsam versteh ich auch wie paintComponent funktioniert.

Nachdem ich DrawPanel extends Panel zu DrawPanel extends JPanel umgeändert habe funktionert auch der Befehl mit dem "super.paintComponent". (Bei extend Panel musste es super.paintComponent*s* )


Zu meiner GUI:
Ja das mit dem generiertem Code finde ich ein bisschen blöd, denn die ganzen Beispiele für GUIs hier im Forum sind sehr einfach aufgebaut und man weiß auch was gemacht wird wie wie z.B. setSize(int,int).
Trotzdem habe ich mal versucht this.add(zeichnen), also mein drawPanel irgendwie auf ein JPanel zu legen, habe wirklich schon jegliche stellen ausprobiert, doch irgendwie will es nicht.

Also ich habe eigentlich insgesamt 4 jPanels auf meinem Frame. Unser Lehrer meinte, dass man die GUI übersichtlicher hält wenn man Panels, womit man Buttons, TextFields von einander trennen und gruppieren kann.
So war das JPanel anfangs noch mit einem Canvas belegt, doch als ich sah, das man auch ohne Canvas zeichnen kann, habe ich das entfernt. Im JPanel 2 sind zwei weitere JPanels drin, die unteranderem Buttons etc enthalten.
Habe zwar die stelle gefunden, wo sehr viel JPanel1 erwähnt wird, aber anscheinend wohl doch falsch.
JPanel1.add(zeichnen) geht auch nicht.
Leider kann ich die gesamte GUI hier nicht einfügen da das die maximale Länge an zeichen sprengt


----------



## diggaa1984 (1. Mrz 2009)

dann mal mal ne skizze wie das JFrame gegliedert ist, dann kann man dir sagen wo was geaddet wird und welchen layoutmanager du verwenden kannst.


----------



## chacky (1. Mrz 2009)

diggaa1984 hat gesagt.:


> dann mal mal ne skizze wie das JFrame gegliedert ist, dann kann man dir sagen wo was geaddet wird und welchen layoutmanager du verwenden kannst.



Oh sorry, das wollte ich vorhin schon mit hochladen doch habe ich das irgendwie vergessen^^
Hier die GUI, vllt können geübtere Augen etwas mehr erkennen.

Hier nocheinmal der Komplette Code der GUI in zwei geteilt.
[HIGHLIGHT="Java"]	public class GUI extends javax.swing.JFrame {

	    public GUI() {
	        initComponents();	
		    DrawPanel zeichnen = new DrawPanel();		    
	    }

	    private static final long serialVersionUID = 1L;

	    private void initComponents() {
	    DrawPanel zeichnen = new DrawPanel();
	    jPanel1 = new javax.swing.JPanel();	
        jPanel2 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jLabel10 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        jLabel12 = new javax.swing.JLabel();
        jPanel4 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jTextField3 = new javax.swing.JTextField();
        jTextField4 = new javax.swing.JTextField();
        jTextField5 = new javax.swing.JTextField();
        jTextField6 = new javax.swing.JTextField();
        jTextField7 = new javax.swing.JTextField();
        jTextField8 = new javax.swing.JTextField();
        jTextField9 = new javax.swing.JTextField();
        jTextField10 = new javax.swing.JTextField();
        jTextField11 = new javax.swing.JTextField();
        jTextField12 = new javax.swing.JTextField();
        jTextField13 = new javax.swing.JTextField();
        jTextField14 = new javax.swing.JTextField();


        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.add(zeichnen);

        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Aktueller Spieler"));

        jButton1.setFont(new java.awt.Font("Tahoma", 1, 12));
        jButton1.setText("Zug beenden");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Baukosten");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setText("Handeln");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jLabel10.setText("Resourcen:");

        jLabel11.setText("gespielte Ereigniskarten:");

        jLabel12.setText("Ereigniskarten");

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addComponent(jLabel10, javax.swing.GroupLayout.DEFAULT_SIZE, 118, Short.MAX_VALUE)
                        .addGap(138, 138, 138))
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addComponent(jLabel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGap(138, 138, 138))
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addComponent(jLabel12, javax.swing.GroupLayout.DEFAULT_SIZE, 118, Short.MAX_VALUE)
                        .addGap(138, 138, 138))
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jButton3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jButton2, javax.swing.GroupLayout.Alignment.LEADING))
                        .addGap(31, 31, 31)
                        .addComponent(jButton1)
                        .addContainerGap())))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addComponent(jLabel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(69, 69, 69)
                .addComponent(jLabel11, javax.swing.GroupLayout.DEFAULT_SIZE, 14, Short.MAX_VALUE)
                .addGap(68, 68, 68)
                .addComponent(jLabel12, javax.swing.GroupLayout.DEFAULT_SIZE, 14, Short.MAX_VALUE)
                .addGap(74, 74, 74)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addGroup(jPanel3Layout.createSequentialGroup()
                        .addComponent(jButton3)
                        .addGap(6, 6, 6)
                        .addComponent(jButton2))
                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Spiel Statistik"));

        jLabel1.setText("Längste Handelsstraße:");

        jTextField1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField1ActionPerformed(evt);
            }
        });

        jLabel2.setText("Größte Rittermacht:");

        jTextField2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField2ActionPerformed(evt);
            }
        });

        jLabel3.setText("Rohstoffkarten");

        jLabel4.setIcon(new javax.swing.ImageIcon(Dateipfad.pfad("\\\\Bilder\\\\blau.png"))); // NOI18N

        jLabel5.setIcon(new javax.swing.ImageIcon(Dateipfad.pfad("\\\\Bilder\\\\rot.png"))); // NOI18N

        jLabel6.setIcon(new javax.swing.ImageIcon(Dateipfad.pfad("\\\\Bilder\\\\orange.png"))); // NOI18N

        jLabel7.setIcon(new javax.swing.ImageIcon(Dateipfad.pfad("\\\\Bilder\\\\green.png"))); // NOI18N

        jLabel8.setText("Siegpunkte");

        jLabel9.setText("Ereigniskarten");

        jButton4.setText("Spielhilfe");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        jButton5.setText("Spielregeln");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });

        jTextField3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField3ActionPerformed(evt);
            }
        });

        jTextField4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField4ActionPerformed(evt);
            }
        });

        jTextField5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField5ActionPerformed(evt);
            }
        });

        jTextField6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField6ActionPerformed(evt);
            }
        });

        jTextField7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField7ActionPerformed(evt);
            }
        });

        jTextField8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField8ActionPerformed(evt);
            }
        });

        jTextField9.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField9ActionPerformed(evt);
            }
        });

        jTextField10.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField10ActionPerformed(evt);
            }
        });

        jTextField11.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField11ActionPerformed(evt);
            }
        });

        jTextField12.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField12ActionPerformed(evt);
            }
        });

        jTextField13.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField13ActionPerformed(evt);
            }
        });

        jTextField14.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField14ActionPerformed(evt);
            }
        });
[/HIGHLIGHT]


----------



## chacky (1. Mrz 2009)

part 2

[HIGHLIGHT="Java"]javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(jLabel1))
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jLabel2)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jTextField2)
                    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 119, Short.MAX_VALUE)))
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel9)
                    .addComponent(jLabel8)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jTextField4, javax.swing.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE)
                            .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                            .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jTextField6)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel4Layout.createSequentialGroup()
                                .addGap(1, 1, 1)
                                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(jTextField7)
                                    .addComponent(jTextField8, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel4)))))
                    .addComponent(jLabel6))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jTextField9)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel4Layout.createSequentialGroup()
                        .addGap(1, 1, 1)
                        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextField10)
                            .addComponent(jTextField11, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jTextField12)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel4Layout.createSequentialGroup()
                        .addGap(1, 1, 1)
                        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextField13)
                            .addComponent(jTextField14, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel7)))))
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton5, javax.swing.GroupLayout.DEFAULT_SIZE, 115, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel2)))
                    .addComponent(jLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel4)
                    .addComponent(jLabel5)
                    .addComponent(jLabel7)
                    .addComponent(jLabel6))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(jPanel4Layout.createSequentialGroup()
                            .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addGroup(jPanel4Layout.createSequentialGroup()
                                    .addComponent(jLabel8)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                    .addComponent(jLabel3))
                                .addGroup(jPanel4Layout.createSequentialGroup()
                                    .addComponent(jTextField3)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                    .addComponent(jTextField4, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE)))
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(jLabel9)
                                .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGroup(jPanel4Layout.createSequentialGroup()
                            .addComponent(jTextField8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jTextField7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addComponent(jTextField11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel4Layout.createSequentialGroup()
                        .addComponent(jTextField14, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField13, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(27, 27, 27)
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton4)
                    .addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        this.add(zeichnen);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 652, Short.MAX_VALUE)
        );
        this.add(zeichnen);
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 613, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>
actionperformed Sachen hab und die Deklaration der Variabeln sind nicth enthalten

}[/HIGHLIGHT]

Das Bild ist im vorrigem Post hinzugefügt worden.
Ich hoffe man kann den von Netbeans-generierten Code noch weiterbenutzen.

gruß chacky


----------



## diggaa1984 (1. Mrz 2009)

also ganz pauschal gesagt würde ich denken das du nur 2 sachen testhalber (ohne im code aufzuräumen aendern musst .. obs geht (Änderung im generiertem Code) und obs klappt weiss ich grad nicht ^^) .. wegen der Markierung der Stelle als Quote



> //Ausschnitt: Zeile 161 - 180 des ersten Fensters .. quasi vorm pack();
> 
> javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
> getContentPane().setLayout(layout);
> ...



was das Layout angeht, kannst du hier wunderbar mit nem Border, wenn nicht sogar FlowLayout arbeiten (betrifft Anordnung von Panel1 und Panel2 auf dem Frame) ... die müssen ja nur nebeneinander sein.

Was meine Änderung bewirken soll ... statt jPanel1 und darauf das DrawPanel, dem Frame zu adden, wird nun pauschal versucht das DrawPanel statt jPanel1 auf dem Frame zu platzieren ... da dein DrawPanel bereits von JPanel erbt und als alleinige Komponente auf dem jPanel1 liegen würde, kannst du Letzteres auch gleich weg lassen. ODER soll auf jPanel1 noch etwas anderes als die Zeichenfläche liegen?!


*edit: this.add(zeichnen); noch entfernen*


----------



## chacky (1. Mrz 2009)

hey

undzwar habe ich das geändert. Nur wird jetzt nur noch die halbe GUI angezeigt. SCöner Effekt. Anscheinend muss da das JPanel1 sein damit die Frame größe erhalten bleibt.
schade -.-

Aber das mit dem FloatLayout les ich mir gleich mal an.


----------



## diggaa1984 (1. Mrz 2009)

setze mal im DrawPanel die prefferedSize auf x*y Pixel

eventuell setze zusätzlich noch die Backgroundfarbe, dann siehst dus erstmal .. wenn dann nicht das gezeichnet wird was du vor hast (polygone bei irgendnem klick oder so) .. dann gehen wir zur nächsten Baustelle  .. denn wir können sicher sein, dass das Panel korrekt dargestellt wird


----------

