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

Status
Nicht offen für weitere Antworten.

chacky

Mitglied
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
 
Zuletzt bearbeitet:

diggaa1984

Top Contributor
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 :D

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 :D
und weniger static machen ^^
 

chacky

Mitglied
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

Top Contributor
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 :D)
[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 ^^
 
Zuletzt bearbeitet:

chacky

Mitglied
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 :D
 

diggaa1984

Top Contributor
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)
 
Zuletzt bearbeitet:

chacky

Mitglied
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.paintComponents )


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 :D
 

diggaa1984

Top Contributor
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

Mitglied
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]
 

Anhänge

  • GUI.jpg
    GUI.jpg
    74 KB · Aufrufe: 62

chacky

Mitglied
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

Top Contributor
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);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(zeichnen, 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(zeichnen, 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())
);

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
 
Zuletzt bearbeitet:

chacky

Mitglied
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.
 

Anhänge

  • gui1.jpg
    gui1.jpg
    100,7 KB · Aufrufe: 53

diggaa1984

Top Contributor
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 :D .. denn wir können sicher sein, dass das Panel korrekt dargestellt wird
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Liste mit repaint aktualisieren Java Basics - Anfänger-Themen 1
J repaint() geht gar nicht; GUI aktualisieren Java Basics - Anfänger-Themen 10
J Progressbar aktualisieren Java Basics - Anfänger-Themen 17
C Timer aktualisieren Java Basics - Anfänger-Themen 5
TimoN11 Array mit unterschiedlichen längen aktualisieren, dann als Methodenwert einsetzen Java Basics - Anfänger-Themen 1
J Java FX - Label aktualisieren Java Basics - Anfänger-Themen 1
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
A Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
P WindowBuilder aktualisieren Java Basics - Anfänger-Themen 0
L Threads Laufbild Erzeugen Problem mit Aktualisieren des JPanels Java Basics - Anfänger-Themen 2
F Problem bei ImageIcon aktualisieren Java Basics - Anfänger-Themen 5
MrSnake Tabelleninhalt aktualisieren Java Basics - Anfänger-Themen 12
R Programm aktualisieren/refreshen Java Basics - Anfänger-Themen 7
2 Uhrzeit und Datum aktualisieren Java Basics - Anfänger-Themen 12
M Methoden Methoden aktualisieren Java Basics - Anfänger-Themen 2
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
G Input/Output Webseite Cache-Control: max-age=3 Öfters Aktualisieren? Java Basics - Anfänger-Themen 1
J Bilder in Labels aktualisieren Java Basics - Anfänger-Themen 2
G Seite aktualisieren Java Basics - Anfänger-Themen 1
O JList aktualisieren während Dateieinlesung Java Basics - Anfänger-Themen 4
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
S Erste Schritte Gui aktualisieren Java Basics - Anfänger-Themen 5
M Variable aus einer anderen Klasse aktualisieren Java Basics - Anfänger-Themen 2
V JFrame aktualisieren Java Basics - Anfänger-Themen 6
M Tabelle aktualisieren (mal wieder) Java Basics - Anfänger-Themen 10
M Erste Schritte Tabelle aktualisieren (mal wieder) Java Basics - Anfänger-Themen 7
D JTable aktualisieren Java Basics - Anfänger-Themen 2
J Variablen Aktualisieren von Instanzvariablen Java Basics - Anfänger-Themen 14
Q Zeitanzeige aktualisieren Java Basics - Anfänger-Themen 7
J Jtable änderung soll graphics aktualisieren Java Basics - Anfänger-Themen 4
R Threads GUI über Hintergrund-Thread aktualisieren Java Basics - Anfänger-Themen 6
F GUI JTextField aktualisieren Java Basics - Anfänger-Themen 3
L Zeit sekündlich aktualisieren Java Basics - Anfänger-Themen 7
J JLabels in Panel Aktualisieren Java Basics - Anfänger-Themen 5
E JList GUI aktualisieren? Java Basics - Anfänger-Themen 3
L Client aktualisieren Java Basics - Anfänger-Themen 6
Ollek ArrayList nach Datenbankeintrag aktualisieren Java Basics - Anfänger-Themen 4
U jTable aktualisieren Java Basics - Anfänger-Themen 5
B PacMan: Panel aktualisieren Java Basics - Anfänger-Themen 2
Dit_ Aktualisieren von mehreren Views Java Basics - Anfänger-Themen 2
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
J JTable aktualisieren wenn TableModel sich ändert Java Basics - Anfänger-Themen 6
F contentPane aktualisieren Java Basics - Anfänger-Themen 2
L JList Aktualisieren funktioniert nur Zufällig Java Basics - Anfänger-Themen 3
B JApplet aktualisieren Java Basics - Anfänger-Themen 2
N Aktualisieren JTable Java Basics - Anfänger-Themen 2
T JList aktualisieren Java Basics - Anfänger-Themen 12
T GUI aktualisieren Java Basics - Anfänger-Themen 6
C jframe bzw. jpanel aktualisieren Java Basics - Anfänger-Themen 13
E Textfeld aktualisieren Java Basics - Anfänger-Themen 3
P Textarea aktualisieren, Referenz fehlt Java Basics - Anfänger-Themen 4
G fenster aktualisieren Java Basics - Anfänger-Themen 2
Antoras Applet aktualisieren Java Basics - Anfänger-Themen 2
M Ausgabe aktualisieren/ Stoppuhr Java Basics - Anfänger-Themen 4
S Jpanel aktualisieren Java Basics - Anfänger-Themen 9
S JTable aktualisieren (nach Datenbank updade) Java Basics - Anfänger-Themen 14
S JTree aktualisieren Java Basics - Anfänger-Themen 4
M JTree aktualisieren Java Basics - Anfänger-Themen 3
K Datum mittels Thread aktualisieren Java Basics - Anfänger-Themen 6
G Bild aktualisieren Problem! Java Basics - Anfänger-Themen 2
G Liste in mehreren unabhängigen Frames aktualisieren. Java Basics - Anfänger-Themen 6
H Textarea aktualisieren Java Basics - Anfänger-Themen 2
V Menüeinträge und ähnliches aktualisieren (aus properties) Java Basics - Anfänger-Themen 10
M Aktualisieren eines JTables funktioniert nicht Java Basics - Anfänger-Themen 6
K Chart zur Laufzeit erstellen und aktualisieren Java Basics - Anfänger-Themen 2
M jTable aktualisieren Java Basics - Anfänger-Themen 5
H JTable richtig aktualisieren Java Basics - Anfänger-Themen 4
J schleife unterbrechen JTextArea aktualisieren Java Basics - Anfänger-Themen 8
W Kurse übers Internet aktualisieren Java Basics - Anfänger-Themen 6
G mehrere Frames nacheinander aktualisieren Java Basics - Anfänger-Themen 2
B JTable Werte aktualisieren Java Basics - Anfänger-Themen 2
G JList - aktualisieren Java Basics - Anfänger-Themen 6
S JTree aktualisieren bzw. komplett neu aufbauen Java Basics - Anfänger-Themen 6
F Aktualisieren einer einzelnen Zelle in JTable Java Basics - Anfänger-Themen 2
F Gebasteltet Fortschrittsanzeige: Aktualisieren Labels? Java Basics - Anfänger-Themen 4
F Aktualisieren einer Liste von einem entfernten Objekt aus. Java Basics - Anfänger-Themen 11
M JList Datenstring erweitern und JList aktualisieren Java Basics - Anfänger-Themen 5
D Applet im IE aktualisieren Java Basics - Anfänger-Themen 6
G JTable aktualisieren Java Basics - Anfänger-Themen 15
B GUI aktualisieren Java Basics - Anfänger-Themen 6
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
S Repaint() Java Basics - Anfänger-Themen 1
J Erste Schritte Mit repaint() ist Label nicht sichtbar Java Basics - Anfänger-Themen 15
S Repaint() in der Schleife funktioniert nicht immer Java Basics - Anfänger-Themen 5
H Graphics / repaint Java Basics - Anfänger-Themen 8
D Verhindern das repaint beim vergrößern aufgerufen wird Java Basics - Anfänger-Themen 9
E Probleme mit repaint() Java Basics - Anfänger-Themen 15
K Erkennt repaint nicht Java Basics - Anfänger-Themen 1
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
G Problem mit repaint() Java Basics - Anfänger-Themen 2
J paint() vs repaint() Java Basics - Anfänger-Themen 3
C repaint wird nicht während Druck auf Maustaste ausgeführt. Java Basics - Anfänger-Themen 4
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
P [JTable] Problem mit repaint() Java Basics - Anfänger-Themen 2
P Interpreter-Fehler Im for loop funkzioniert repaint nicht :( Java Basics - Anfänger-Themen 4
M repaint() in run-Methode funktioniert nicht Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben