Probleme bei JPanel Darstellung

Status
Nicht offen für weitere Antworten.

BlackViruZ

Aktives Mitglied
Hallo liebe Java Comunity^^
Ich arbeite an einem kleinen Übungs-programm, welches (u.a.) ein Schachbrett darstellen muss.
Ich habe dies mithilfe von JPanels mit verschiedenen Hintergrundfarben erledigt (später muss ich ja noch auf den Schachbrett Feldern etwas zeichnen).

Das Problem ist folgendes:

Wie man sieht ist am Rechten bzw unterem Rand des Schachbretts eine deutliche lücke zwischen dem Rahmen und den JPanels selbst.
Da das Schachbrett selbst ein JPanel mit GridLayout ist, weiß ich nicht woher dieser Rand kommt, bzw wie ich ihn vermeiden kann. - Ich weiß nur das bei geringerer Feld-Anzahl die Lücke kleiner wird, also hat es wohl vermutlich etwas mit der hohen Anzahl an JPanels zu tun (daher auch zur verdeutlichung die hohe Anzahl Felder im Bild)
Bitte helft mir :oops: ich bin ratlos^^

Hier der Quellcode:

Das JFrame selbst:
Code:
public class QueenFrame extends JFrame implements ActionListener {
	private JPanel pTitle, pBoard, pButtons;
	private JLabel lTitle;
	private Field fBoard[][];
	private int queenAmount;
	
	public static void main(String args[]){
		new QueenFrame(64);
	}

	public QueenFrame() {
		this(4);
	}

	public QueenFrame(int queenAmount) {
		this.queenAmount = queenAmount;

		Container cont = new Box(BoxLayout.X_AXIS);
		this.setContentPane(cont);

		fBoard = createChessBoard(queenAmount, null);
		pBoard = wrapChessBoard(fBoard, new Dimension(queenAmount * 15,
				queenAmount * 15));
		
		cont.add(pBoard);
		this.pack();
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}

	private static JPanel wrapChessBoard(Field[][] board,
			Dimension chessBoardSize) {
		JPanel result = new JPanel(
				new GridLayout(board[0].length, board.length));
		for (int i = 0; i < board.length; i++) {
			for (int j = 0; j < board[i].length; j++) {
				result.add(board[i][j].space);
			}
		}
		result.setBorder(BorderFactory.createCompoundBorder(BorderFactory
				.createCompoundBorder(BorderFactory.createCompoundBorder(
						BorderFactory.createEmptyBorder(5, 5, 5, 5),
						BorderFactory.createBevelBorder(BevelBorder.RAISED)),
						BorderFactory.createEmptyBorder(5, 5, 5, 5)),
				BorderFactory.createLineBorder(Color.black, 2)));
		result.setMinimumSize(chessBoardSize);
		result.setPreferredSize(chessBoardSize);
		result.setMaximumSize(chessBoardSize);
		result.setSize(chessBoardSize);
		
		return result;
	}

	private static Field[][] createChessBoard(int sideLenght, Field[][] oldBoard) {
		Field[][] result = new Field[sideLenght][sideLenght];
		for (int i = 0; i < sideLenght; i++) {
			for (int j = 0; j < sideLenght; j++) {
				result[i][j] = (oldBoard != null && oldBoard.length >= i
						&& oldBoard[i].length >= j && oldBoard[i][j] != null) ? oldBoard[i][j]
						: new Field((i % 2 == 0) ? ((j % 2 == 0) ? Field.BLACK
								: Field.WHITE) : ((j % 2 == 0) ? Field.WHITE
								: Field.BLACK));
			}
		}
		return result;
	}

	public int getQueenAmount() {
		return queenAmount;
	}

	public void setQueenAmount(int queens) {
		// TODO everything
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO everything
	}


Die Field Klasse :
Code:
public class Field {
	public final JPanel space = new JPanel();

	public final boolean color;
	private boolean hasQueen = false;

	public static boolean BLACK = true;
	public static boolean WHITE = false;

	public Field(boolean color) {
		this.color = color;
		space.setOpaque(true);
		this.fill(color);
	}

	public void setQueen(boolean arg) {
		hasQueen = arg;
		this.fill(arg);
	}

	public boolean hasQueen() {
		return hasQueen;
	}

	private void fill(boolean arg) {
		space.setBackground((arg == BLACK) ? Color.black : Color.white);
	}
}
Schon mal danke für die freundliche hilfe ;)
 

Landei

Top Contributor
Angenommen, dein Panel ist 100x100 Pixel, und du willst 15x15 Felder darstellen. Dann rechnet dein GridLayout 100 / 15 = 6, jedes Feld ist also 6 Pixel breit, macht 6 x 15 = 90 Pixel, macht 10 Pixel Rand.
Und schon erscheint auf der Tribüne
die Pixel-Stampf-und-Quetsch Maschine
Und wie sie quetscht, und wie sie stampft!
Der Qualm aus ihren Nähten dampft!
Und die Moral von der Geschicht':
Halbe Pixel gibt es nicht!!!!
 

Marco13

Top Contributor
Einfachste Abhilfe (wenn man sich mit diesem Rand nicht abfinden will) wäre wohl, ein eigenes GridLayout zu schreiben (mit copy&paste vom Original...) das in dieser Hinsicht ein anderes Verhalten hat.
 

BlackViruZ

Aktives Mitglied
Landei hat gesagt.:
Angenommen, dein Panel ist 100x100 Pixel, und du willst 15x15 Felder darstellen. Dann rechnet dein GridLayout 100 / 15 = 6, jedes Feld ist also 6 Pixel breit, macht 6 x 15 = 90 Pixel, macht 10 Pixel Rand.
Und schon erscheint auf der Tribüne
die Pixel-Stampf-und-Quetsch Maschine
Und wie sie quetscht, und wie sie stampft!
Der Qualm aus ihren Nähten dampft!
Und die Moral von der Geschicht':
Halbe Pixel gibt es nicht!!!!

Hier ist Integer mal wirklich unpraktisch^^
Danke für den Hinweis, das hätte mir echt selbst einfallen sollen :autsch:
Dann lese ich mir wohl mal die Sun-Totus zu eigenen Layoutmanagern durch^^
:###

Danke für die Hilfe^^
 

BlackViruZ

Aktives Mitglied
Landei hat gesagt.:
Angenommen, dein Panel ist 100x100 Pixel, und du willst 15x15 Felder darstellen. Dann rechnet dein GridLayout 100 / 15 = 6, jedes Feld ist also 6 Pixel breit, macht 6 x 15 = 90 Pixel, macht 10 Pixel Rand.
Und schon erscheint auf der Tribüne
die Pixel-Stampf-und-Quetsch Maschine
Und wie sie quetscht, und wie sie stampft!
Der Qualm aus ihren Nähten dampft!
Und die Moral von der Geschicht':
Halbe Pixel gibt es nicht!!!!

Ich hatte mich eine Weile nicht mit dem Problem beschäftigt - aber jetzt habe ich nochmal deine theorie woran es liegen könnte versucht zu realisieren -
Dabei ist mir aufgefallen das es nicht daran liegen kann, da ich (wie im Code Fragment auch erkennbar) die Größe des JPanels, welches die anderen Felder beinhaltet (also im Prinzip das Schachbrett) erst aus der Summe der Felder berechnen lasse - soll heißen ich berechne wie groß das Feld werden soll wenn jedes JPanel eine Seitenlänge von 15 hat, damit umgehe ich unbewusst von dir genannte Problematik denn (im Beispiel mit 64) ist 64*15 ist 960, also ist logischerweise 960/64=15(die Breite des einzelnen Feldes).

Demnach müsste das Problem wo anders liegen, ich wäre über einen anderen lösungs-ansatz erfreut (will mich davor drücken einen eigenen Layout-Manager zu schreiben^^)

Danke schonmal
 

diggaa1984

Top Contributor
probier mal damit, hat mir erst neulich gut geholfen:
java.sun.com/javase/6/docs/api/java/awt/GridLayout.html#minimumLayoutSize

Größe des umgebenden panels sollte sich dann aus diesem Wert ergeben +/- korrekturen nicht ausgeschlossen

in der Fieldklasse kannst du dann auch für das panel angeben wie gross es minimale oder bevorzugt sein soll, dann kannst die größe der felder zentral aendern ohne da ausserhalb irgendwo rumpfuschen zu müssen und mit obiger methode sagt dir dann das gridlayout wieviel platz es braucht
 

BlackViruZ

Aktives Mitglied
diggaa1984 hat gesagt.:
probier mal damit, hat mir erst neulich gut geholfen:
java.sun.com/javase/6/docs/api/java/awt/GridLayout.html#minimumLayoutSize

Größe des umgebenden panels sollte sich dann aus diesem Wert ergeben +/- korrekturen nicht ausgeschlossen

in der Fieldklasse kannst du dann auch für das panel angeben wie gross es minimale oder bevorzugt sein soll, dann kannst die größe der felder zentral aendern ohne da ausserhalb irgendwo rumpfuschen zu müssen und mit obiger methode sagt dir dann das gridlayout wieviel platz es braucht

Jo vielen Dank,
Das war wirklich die Lösung des Problems!
Ich habe jetzt der Field Klasse einen Konstruktor mit einem Dimension Parameter verpasst, auf den dann die minimumSize von dem Beinhalteten JPanel gesetzt wird, und die wrapChessBoard Methode direkt die Größe des "Schachbrett" JPanels mithilfe von der minimumLayoutSize bestimmen lassen -
Jetzt wird das Brett korrekt dargestellt. (musste mich nur noch um das resize Verhalten kümmern)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
L Probleme mit JPanel AWT, Swing, JavaFX & SWT 8
S JScrollpane mit JPanel und Probleme AWT, Swing, JavaFX & SWT 4
S JPanel-Probleme AWT, Swing, JavaFX & SWT 3
K JButton auf JPanel in JTable (Darstellungs-/Event-Probleme) AWT, Swing, JavaFX & SWT 16
P Probleme bei BorderLayout im JPanel AWT, Swing, JavaFX & SWT 7
M GridBagLayout Probleme bei JPanel Aufteilung AWT, Swing, JavaFX & SWT 3
C Probleme einem JPanel den Fokus zuzuweisen AWT, Swing, JavaFX & SWT 2
S Probleme mit Anordnung von Komponenten im JPanel AWT, Swing, JavaFX & SWT 3
F Probleme bei add(Component) JPanel > JFrame AWT, Swing, JavaFX & SWT 3
G Probleme mit JProgressbar auf JPanel in JFrame AWT, Swing, JavaFX & SWT 6
B JPanel in JScrollPane: Probleme mit Scrollleisten AWT, Swing, JavaFX & SWT 13
A Probleme mit JPanel und BoxLayout AWT, Swing, JavaFX & SWT 5
N Probleme mit new JScrollPane(jPanel) AWT, Swing, JavaFX & SWT 6
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5
C 3 kleine Probleme... AWT, Swing, JavaFX & SWT 13
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
H JTree Probleme AWT, Swing, JavaFX & SWT 9
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
K 2D-Grafik .GIF macht mir Probleme AWT, Swing, JavaFX & SWT 14
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
T JTable Graphik probleme AWT, Swing, JavaFX & SWT 3
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben