JPanel repaint() wird nicht gemacht!

Status
Nicht offen für weitere Antworten.
D

dreadlord

Gast
Hallo,
mein Problem ist folgendes, ich erstelle nach einem Buttonklick einen JPanel, wo ich drauf zeichne, jedoch möchte
ich auch das sich das Fenster noch mit vergrößert! Nun das mit dem Fenter vergrößern habe ich mit der resize()
Methode gemacht und funktioniert auch, jetzt ist nur der Panel noch nicht im vergrößerten Zustand!
Nachdem ich den JPanel dem Container hinzugefügt habe, habe ich auch nochmal einen validate() und repaint()
ausgeführt und es mit dem ComponentListener auch, jedoch passt sich der JPanel erst der Größe an
wenn ich die Fenstergröße manuell verändere!
Es wäre super wenn wir jemand damit weiterhelfen könnte!
 

AAF

Mitglied
Versuch bitte folgendes:

Code:
private JPanel jp = new JPanel();
jp.updateUI();
Ansonsten bitte deinen Code mal posten, merci.

Gruss Adi aus der Schweiz
 
D

dreadlord

Gast
okay also bei mir gibts die Methode update() aber kein updateUI(), aber hat trotzdem keinen Effekt!
Ich hab den Quelltext mal ein wenig abgekürzt und nur die relevanten Sachen miteinbezogen:

MainWindow.java:
Code:
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*; 

public class MainWindow extends JFrame implements ActionListener,Serializable {
	
	private static final int MAINMODE = 1;
	private static final int GAMEMODE = 2;

	Container content;
	// .....
	
	//Constructor
	public MainWindow(String title) {
		super(title);
		setLookAndFeel();

		content = getContentPane();
		setMainMode(MAINMODE);

		// .....
		
		addWindowListener(new WindowClosingAdapter());
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		
		pack();
		setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		Object action = e.getSource();
		
			if(action == menuitems[0]) {
				// .....
			}
			else if(action == menuitems[1]) {
				// .....
			}
			else if(action == menuitems[3]) {
				setMainMode(GAMEMODE);
			}
			else if(action == gamebtns[0] || action == menuitems[4]) {
				setGameMode(Game.FOUR_WINS);
			}
			// .....
	}

	private void setLookAndFeel() {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
			SwingUtilities.updateComponentTreeUI(this);
		} catch(Exception e) {
			System.err.println("Couldn't use the systems Look and Feel!");
		}
	}
	
	private void buildConstraints(GridBagConstraints gbc,int gx,int gy,
			  					  int gw,int gh,int wx,int wy) {
		gbc.gridx = gx;
		gbc.gridy = gy;
		gbc.gridwidth = gw;
		gbc.gridheight = gh;
		gbc.weightx = wx;
		gbc.weighty = wy;
	}

	private void setMainMode(int prevMode) {
		if(prevMode == GAMEMODE) {
			menuitems[1].setEnabled(false);
			menuitems[3].setEnabled(false);
			for(int i=4;i<8;i++)
				menuitems[i].setEnabled(true);
		
			content.removeAll();
		}
		
		GridBagLayout gbl = new GridBagLayout();
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.insets = new Insets(5,5,5,5);
		content.setLayout(gbl);
		
		buildConstraints(gbc,0,0,1,1,0,0);
		gbl.setConstraints(gameinfo,gbc);
		content.add(gameinfo);
		
		gbc.fill = GridBagConstraints.HORIZONTAL;
		for(int i=0;i<gamebtns.length;i++) {
			buildConstraints(gbc,0,i+1,1,1,0,0);
			gbl.setConstraints(gamebtns[i],gbc);
			content.add(gamebtns[i]);
		}
		
		if(prevMode == GAMEMODE) {
			pack();
			content.validate();
			content.repaint();
		}
	}
	
	private void setGameMode(int gameid) {
		int rows=8;
		int cols=8;

		// .....
		
		content.removeAll();
		
		GridBagLayout gbl = new GridBagLayout();
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
		gbc.anchor = GridBagConstraints.NORTHWEST;
		gbc.insets = new Insets(5,5,5,5);
		content.setLayout(gbl);
		
		gamefield = new GameField(player1,player2,gameid,rows,cols);
		
		buildConstraints(gbc,0,0,1,6,1,1);
		gbl.setConstraints(gamefield,gbc);
		content.add(gamefield);

		// .....
		
		this.resize(500,500);
		content.validate();
		content.repaint();
	}

GameField.java:
Code:
import java.awt.*;
import javax.swing.*;

public class GameField extends JPanel {
	public static final int NOTSET = 0;
	public static final int PLAYER1 = 1;
	public static final int PLAYER2 = 2;

	private Gamer player1,player2;
	private int gameid;
	protected int rows,cols;
	protected int[][] gamematrix;
	
	public GameField(Gamer p1,Gamer p2,int gid,int rows,int cols) {
		gamematrix = new int[rows][cols];
		this.rows = rows;
		this.cols = cols;
		gameid = gid;
		player1 = (Gamer)p1.clone();
		player2 = (Gamer)p2.clone();
		this.setBackground(Color.WHITE);
	}

	// ......

	public void paintComponent(Graphics g) {
		int sizeX = getSize().width;
		int sizeY = getSize().height;
		int maxdim = (sizeX>sizeY)?sizeY/rows:sizeX/cols;
		int endline = (sizeX>sizeY)?sizeY-sizeY%maxdim:sizeX-sizeX%maxdim;
		
		g.setColor(Color.BLACK);
		for(int i=0;i<=rows;i++)
			g.drawLine(0,i*maxdim,endline,i*maxdim);
			
		for(int j=0;j<=cols;j++)
			g.drawLine(j*maxdim,0,j*maxdim,endline);
		
		for(int i=0;i<rows;i++) {
			for(int j=0;j<cols;j++) {
				int val = gamematrix[i][j];

				if(val != 0) {
					// The actual field has been already set
					int posX = i*maxdim;
					int posY = j*maxdim;
					int gcid = (val == 1)?player1.getGameCoinId():player2.getGameCoinId();
					Color gcc = (val == 1)?player1.getGameCoinColor():player2.getGameCoinColor();
					
					g.setColor(gcc);
					if(gcid == STAR) drawStar(g,posX,posY,maxdim);
					else if(gcid == HEXAGON) drawHexagon(g,posX,posY,maxdim);
					else drawHeart(g,posX,posY,maxdim);
				}
			}
		}
	}

Falls ihr mehr vom Code braucht lasst es mich wissen, jedoch denke ich ist das der Teil, der für die Anpassung
des JPanel's reichen müsste!
 

Marco13

Top Contributor
Versuch' das bitte NICHT!

updateUI ruft man auf, wenn sich das Look & Feel geändert hat - also so gut wie nie. Dass dabei "zufällig" auch ein bißchen geValidatet wird, ist der Grund dafür, dass es immer wieder empfohlen wird. Es ist aber eigentlich Unfug.
(Irgendwie kommt mir das bekannt wor).

An den Fragesteller: Poste ein kleines compilierbares Programm, bei dem der Fehler auftritt, dann wird man dir die Lösung sagen können.

Edit: Hast du ja schon - war zu langsam. Mal drüberschauen...
 

Marco13

Top Contributor
So als schnelle Lösung: Ruf' das validate und repaint doch auf dem Fenster auf (und nicht nur auf dem content)
 

JAVAn00b

Bekanntes Mitglied
am einfachsten machst du das so

Code:
panel.add(kindPanel);
panel.validate();
panel.repaint();

wofür brauchst du das denn???

Wenn du nur ein fenster haben willst und die ganzen panels hinein laden willst ist JInternalFrame besser geeignet.
Die sehen vor allen dingen beser aus ;).

JInternalFrame addest du auf einen DesktopPane.

Also quasi so:

Code:
JDesktopPane desktop = new JDesktopPane();
JInternalFrame internFrame = new JInternalFrame(); 

desktop.add(internFrame);

ist eine bessere lösung und eine schönere :D
 
D

dreadlord

Gast
okay das was marco13 geschrieben hat ist die Lösung meines Problems!
ich muss natürlich den JFrame neu anpassen und nicht den JPanel content!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
I repaint bei jpanel Java Basics - Anfänger-Themen 10
richis-fragen Optisch JPanel BorderLayout vertikaler Rand dicker als horizontaler Rand Java Basics - Anfänger-Themen 4
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
J Ein mit UI-Designer erstelltes JPanel einblenden Java Basics - Anfänger-Themen 0
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
Zeppi JPanel responsive Grid Java Basics - Anfänger-Themen 0
J JPanel in JScrollPanel Java Basics - Anfänger-Themen 4
Elyt JPanel als HintergrundBild Java Basics - Anfänger-Themen 7
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
B Wie kann man an ein JPanel eine Scrollbar anheften? Java Basics - Anfänger-Themen 8
O Swing JPanel Java Basics - Anfänger-Themen 4
CptK Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2
S JPanel wird nicht angezeigt Java Basics - Anfänger-Themen 1
D Animation JPanel Java Basics - Anfänger-Themen 1
M JLabels "verrutschen" beim übergeben von JPanel Java Basics - Anfänger-Themen 2
D Auf angeklicktes JPanel zugreifen Java Basics - Anfänger-Themen 5
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
D JPanel passt die Größe nicht an Java Basics - Anfänger-Themen 22
Y Webinhalt JPanel Java Basics - Anfänger-Themen 6
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
S JPanel variablenabhängig erstellen Java Basics - Anfänger-Themen 13
J Methoden Dinge auf einem JPanel paltzieren Java Basics - Anfänger-Themen 1
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
A altes JPanel entfernen und neues öffnen Java Basics - Anfänger-Themen 5
I A0-Format in jpanel anzeigen Java Basics - Anfänger-Themen 1
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
J Probleme mit eigenem JPanel (IDE Eclipse) Java Basics - Anfänger-Themen 4
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9
I Problem mit JPanel Java Basics - Anfänger-Themen 0
B JPanel ändert die Hintergrundfarbe nicht Java Basics - Anfänger-Themen 2
F Threads funktionieren auf JPanel nicht Java Basics - Anfänger-Themen 1
C JPanel in MessageDialog Java Basics - Anfänger-Themen 1
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Inhalt von JPanel erst nach Resize sichtbar Java Basics - Anfänger-Themen 2
M Listener einerm JPanel hinzufuegen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
S vom JPanel aus durch Mouselistener Internet aufrufen Java Basics - Anfänger-Themen 6
Z JPanel bleibt leer Java Basics - Anfänger-Themen 2
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
Q JPanel Java Basics - Anfänger-Themen 2
K Erste Schritte jpanel in einer klasse auslagern Java Basics - Anfänger-Themen 3
N String auf JPanel bewegen Java Basics - Anfänger-Themen 6
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
S Layout mit JPanel in JScrollPanel funktioniert nicht Java Basics - Anfänger-Themen 3
S JPanel drucken -> PrinterException Java Basics - Anfänger-Themen 2
B JPanel -JTable Java Basics - Anfänger-Themen 2
H JPanel Hintergrund transparent setzen? Java Basics - Anfänger-Themen 10
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
L zoomen aus jpanel Java Basics - Anfänger-Themen 7
P Bekomme in meinen JPanel nur eine JComponente angezeigt Java Basics - Anfänger-Themen 7
R JFrame über einen JPanel Java Basics - Anfänger-Themen 5
I Veränderungen am JPanel vom JDialog aus Java Basics - Anfänger-Themen 6
F JPanel zu klein Java Basics - Anfänger-Themen 5
D GUI - Objekte in JPanel nach oben schieben Java Basics - Anfänger-Themen 2
S JPanel wird nicht eingefügt Java Basics - Anfänger-Themen 3
P Netbeans Platform - JLabel und JPanel setLocation Problem Java Basics - Anfänger-Themen 2
Kenan89 JPanel mit JTable Java Basics - Anfänger-Themen 9
I JPanel in JPanel Java Basics - Anfänger-Themen 2
A Zugriff auf Komponente innerhalb einer JPanel Java Basics - Anfänger-Themen 8
J Auf einem JPanel ein JFrame platzieren Java Basics - Anfänger-Themen 10
S JPanel anzeige Java Basics - Anfänger-Themen 2
propra Wie mache ich einem JPanel mein bereits instanziertes Model bekannt Java Basics - Anfänger-Themen 9
T Zugreifen auf JPanel Java Basics - Anfänger-Themen 4
K JPanel auslagern Java Basics - Anfänger-Themen 9
J Paint Methode von JPanel aufrufen Java Basics - Anfänger-Themen 15
T Tastendruck simulieren in JPanel Java Basics - Anfänger-Themen 3
P JPanel in JTable einfügen Java Basics - Anfänger-Themen 23
E Erste Schritte Objekte werden in JPanel angedockt und maximiert Java Basics - Anfänger-Themen 7
M Componenten auf JPanel anzeigen Java Basics - Anfänger-Themen 2
F JPanel als JPG - weisse Fläche Java Basics - Anfänger-Themen 9
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
M JLabel auf JPanel positionieren Java Basics - Anfänger-Themen 8
M Verständnisfrage zu JPanel Java Basics - Anfänger-Themen 3
M MouseListener funkioniert auf JPanel nicht Java Basics - Anfänger-Themen 8
D JPanel + ein JLabel Java Basics - Anfänger-Themen 8
B JPanel-Oberfläche speichern Java Basics - Anfänger-Themen 9
X JTable in JPanel in JTabbedPane mouseevent von jtable kommt nicht durch Java Basics - Anfänger-Themen 3
P GUI, JPanel Java Basics - Anfänger-Themen 7
H JPanel in andere Klasse übergeben Java Basics - Anfänger-Themen 7
D Grösse eines JPanel hinsichtlich LayoutManager festlegen Java Basics - Anfänger-Themen 4
B JPanel über anderem JPanel Java Basics - Anfänger-Themen 6
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
F Unterschied JPanel und JFrame Java Basics - Anfänger-Themen 5
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
C jPanel im jPanel verändern Java Basics - Anfänger-Themen 15
B JPanel nachträglich verändern Java Basics - Anfänger-Themen 20
C JPanel erhält sporadisch keinen Fokus Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben