Hallo Leute,
ich brauche Hilfe beim BorderLayout.
Ich möchte 4 Objekte abgeleitet von JPanel um ein ein fünftes JPanel legen.
Irgendwie werden die Außenränder nicht so groß gezeichnet,
als sie wären. Da brauche ich eure Hilfe, weil ich den Fehler nicht finde.
Dann möchte ich die Länge des Außenrandes in East und West gleich groß
erhalten (133 * 100 px). Ich bin daran kläglich gescheitert.
Das Trisento Spiel JPanel poste ich hier nicht.
Dafür den Code für die 4 Jpanels und der entsprechende Frame mit BorderLayout:
Seitenraender.java
TrisentoBorderLayout.java
Wie kann man es besser machen?
Beste Grüße
ich brauche Hilfe beim BorderLayout.
Ich möchte 4 Objekte abgeleitet von JPanel um ein ein fünftes JPanel legen.
Irgendwie werden die Außenränder nicht so groß gezeichnet,
als sie wären. Da brauche ich eure Hilfe, weil ich den Fehler nicht finde.
Dann möchte ich die Länge des Außenrandes in East und West gleich groß
erhalten (133 * 100 px). Ich bin daran kläglich gescheitert.
Das Trisento Spiel JPanel poste ich hier nicht.
Dafür den Code für die 4 Jpanels und der entsprechende Frame mit BorderLayout:
Seitenraender.java
Code:
package trisento_grid;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Seitenraender extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
// private static final int randzeile = 8;
// private static final int randspalten = 6;
Feld[][] spielfeldrand;
int randseite;
// 1 oberer und unterer Spielfeld-Rand, 2 für linker und rechter Rand
public Seitenraender(int spielfeldRand) {
if (spielfeldRand == 1) {
randseite = 1;
erzeugeRand();
} else if (spielfeldRand == 2) {
randseite = 2;
}
}
private void erzeugeRand() {
if (randseite == 1) {
spielfeldrand = new Feld[1][8];
for (int i = 0; i < 1; i++) {
for (int j = 0; j < 8; j++) {
spielfeldrand[i][j] = new Feld(j * 133, 0, 133, 100);
spielfeldrand[i][j].setFarbe(Color.LIGHT_GRAY);
}
}
}
else if(randseite == 2) {
/* spielfeldrand = new Feld[6][1];
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 1; j++) {
spielfeldrand[i][j] = new Feld(0, i * 100, 133, 100);
spielfeldrand[i][j].setFarbe(Color.LIGHT_GRAY);
}
}*/
}
}
public void paintComponent(Graphics rand) {
super.paintComponent(rand);
zeichneRand(rand);
}
private void zeichneRand(Graphics rand) {
if (randseite == 1) {
//Rand oben und unten
for (int i = 0; i < 1; i++) {
for (int j = 0; j < 8; j++) {
//Beschriftung mit Buchstaben
if (j > 0 && j < 7) {
//arbeitet mit zahhlen und parst diese in chars zu String
rand.setColor(spielfeldrand[i][j].getFarbe());
rand.fillRect(spielfeldrand[i][j].x,
spielfeldrand[i][j].y,
spielfeldrand[i][j].width,
spielfeldrand[i][j].height);
//Buchstabe generieren und schreiben
char buchstabe = (char)(64 + j);
rand.setColor(Color.black);
rand.setFont(new Font("Calibri", Font.BOLD, 14));
rand.drawString(String.valueOf(buchstabe), spielfeldrand[i][j].x + 66, spielfeldrand[i][j].y + 50);
} else {
rand.setColor(spielfeldrand[i][j].getFarbe());
rand.fillRect(spielfeldrand[i][j].x,
spielfeldrand[i][j].y,
spielfeldrand[i][j].width,
spielfeldrand[i][j].height);
}
//Gitter rübersetzen
rand.setColor(Color.white);
rand.drawRect(spielfeldrand[i][j].x,
spielfeldrand[i][j].y,
spielfeldrand[i][j].width,
spielfeldrand[i][j].height);
}
}
}
else if (randseite == 2)
{
for(int i = 0; i < 6; i++) {
rand.setColor(Color.LIGHT_GRAY);
rand.fillRect(0, i * 100, 133, 100);
rand.setColor(Color.WHITE);
rand.drawRect(0, i * 100, 133, 100);
//Text
rand.setColor(Color.black);
rand.setFont(new Font("Calibri", Font.BOLD, 14));
rand.drawString(String.valueOf(i + 1), 63, (i * 100) + 50);
}
}
}
/* public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame fenster = new JFrame("Trisentoseite");
// fenster.setTitle("Trisento");
fenster.setSize(871, 629);
fenster.setLocation(100, 100);
fenster.setResizable(false);
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.getContentPane().add(new Seitenraender(2));
// fenster.pack();
fenster.setVisible(true);
} */
}
TrisentoBorderLayout.java
Code:
package trisento_grid;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JFrame;
public class TrisentoBorderLayout extends JFrame {
/**
*
*/
private static final long serialVersionUID = -2203104514633638245L;
final private Spielfelder trisento = new Spielfelder();
final private Seitenraender randoben = new Seitenraender(1);
final private Seitenraender randunten = new Seitenraender(1);
final private Seitenraender randlinks = new Seitenraender(2);
final private Seitenraender randrechts = new Seitenraender(2);
//muss immer etwas mit BorderLayout heißen
final private String[] rahmen = {BorderLayout.EAST, BorderLayout.NORTH, BorderLayout.WEST, BorderLayout.SOUTH, BorderLayout.CENTER};
/**
* @param args
*/
public TrisentoBorderLayout() {
Container layout = getContentPane();
//Layout laden in Container
// layout.setSize(new Dimension(1100, 1100));
layout.setLayout(new BorderLayout());
// layout.setMaximumSize(new Dimension(807, 629));
layout.add(randoben, rahmen[1]);
layout.add(trisento, rahmen[4]);
layout.add(randunten, rahmen[3]);
layout.add(randlinks, rahmen[0]);
layout.add(randrechts, rahmen[2]);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame fenster = new TrisentoBorderLayout();
fenster.setTitle("Trisento");
fenster.setSize(834, 650);
// fenster.setSize(807, 629);
fenster.setLocation(0, 0);
fenster.setResizable(true);
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// fenster.getContentPane().add(new Spielfelder());
// fenster.pack();
fenster.setVisible(true);
}
}
Wie kann man es besser machen?
Beste Grüße