Hallöle,
ähm es hat etwas länger gedauert mit der Bearbeitung. Ich habe nun ein paar Wochen selbst daran gearbeitet, viel umhergefummelt und bin leider nicht einen Schritt weiter gekommen. Aber ich glaube, es ist im aktuellen Zustand irgendwie besser als vorher… Also die Voraussetzung meine ich. Aus der ich etwas machen kann.
Ich habe mich nun von diesem lästigen JLabelZeuchs losgesagt und versuche es nun mit folgender Idee:
Ich habe ein GridBagLayout, wie es bereits in den Post von vorher existierte. Und dazu passend generiere ich nun anstatt JLabels entsprechende JPanel, die mit der paint Graphics Methode, die mir ans Herz gelegt wurde arbeitet.
Die Idee ist folgende:
Ich habe die Klasse Spielzelle mit folgendem Inhalt:
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class Spielzelle extends JPanel {
private int zellart; //0=Nichts;1=Stuhl;2=Tisch
private BufferedImage tischimg;
public Spielzelle(int zellart) {
this.zellart = zellart;
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) {
klick();
}
});
}
public int getZellart() {
return zellart;
}
public void setZellart(int zellart) {
this.zellart = zellart;
}
public void paintComponent(Graphics stift) {
super.paintComponent(stift);
int height = getHeight();
int width = getWidth();
/*try {
URL url = new URL(BaseURL.getJarBase(Spielfeld.class), "demo_DE2.jpg");
this.tischimg = ImageIO.read(this.getClass().getResourceAsStream("/background.jpg"));
} catch (IOException e) { }
stift.drawImage(this.tischimg, 0, 0, width, height, null);*/
}
public void klick() {
this.repaint();
}
}```
Das bezeichnet diese 11 mal 11 Zellen da in der Mitte. Diese hab ich dann in drei Arten eingeteilt, die in einem int dargestellt werden. 0 ist einfach ein Nichts, eine leere Zelle, die nur da ist, damit das Design nicht zerstört wird. Platzhalter. 1 sind die Stühle und 2 sind die Tische.
Standardmäßig wird alles mit 0 erstellt und später wenn ich Tische und Stühle definiere wird das umgeschrieben.
Meine Spielfeldmethode sieht weiterhin wenig verändert aus:
```package spiel;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JLabel;
import javax.swing.JPanel;
class Spielfeld extends JPanel {
protected static Spielzelle spielfeldlabel[][] = new Spielzelle[11][11];
protected static ArrayList<Spielzelle> spielfeldlabeltisch = new ArrayList<Spielzelle>(12);
protected static ArrayList<Spielzelle> spielfeldlabelstuhl = new ArrayList<Spielzelle>(24);
protected static int stuhlnummer;
protected static int tischnummer;
public Spielfeld() {
setLayout(new GridLayout(11,11));
for(int i=0;i<11;i++) {
for(int n=0;n<11;n++) {
spielfeldlabel[n]** = new Spielzelle(0);
spielfeldlabel[n]**.setBackground(new Color(255,255,255));
spielfeldlabel[n]**.setOpaque(true);
add(spielfeldlabel[n]**);
}
}
feldmalen();
}
public void feldmalen() {
spielfeldlabeltisch.add(spielfeldlabel[4][3]);
spielfeldlabeltisch.add(spielfeldlabel[5][2]);
spielfeldlabeltisch.add(spielfeldlabel[6][3]);
spielfeldlabeltisch.add(spielfeldlabel[7][4]);
spielfeldlabeltisch.add(spielfeldlabel[8][5]);
spielfeldlabeltisch.add(spielfeldlabel[7][6]);
spielfeldlabeltisch.add(spielfeldlabel[6][7]);
spielfeldlabeltisch.add(spielfeldlabel[5][8]);
spielfeldlabeltisch.add(spielfeldlabel[4][7]);
spielfeldlabeltisch.add(spielfeldlabel[3][6]);
spielfeldlabeltisch.add(spielfeldlabel[2][5]);
spielfeldlabeltisch.add(spielfeldlabel[3][4]);
spielfeldlabelstuhl.add(spielfeldlabel[4][4]);
spielfeldlabelstuhl.add(spielfeldlabel[5][1]);
spielfeldlabelstuhl.add(spielfeldlabel[6][2]);
spielfeldlabelstuhl.add(spielfeldlabel[7][3]);
spielfeldlabelstuhl.add(spielfeldlabel[8][4]);
spielfeldlabelstuhl.add(spielfeldlabel[7][5]);
spielfeldlabelstuhl.add(spielfeldlabel[6][6]);
spielfeldlabelstuhl.add(spielfeldlabel[5][7]);
spielfeldlabelstuhl.add(spielfeldlabel[4][6]);
spielfeldlabelstuhl.add(spielfeldlabel[3][5]);
spielfeldlabelstuhl.add(spielfeldlabel[2][4]);
spielfeldlabelstuhl.add(spielfeldlabel[3][3]);
spielfeldlabelstuhl.add(spielfeldlabel[4][2]);
spielfeldlabelstuhl.add(spielfeldlabel[5][3]);
spielfeldlabelstuhl.add(spielfeldlabel[6][4]);
spielfeldlabelstuhl.add(spielfeldlabel[9][5]);
spielfeldlabelstuhl.add(spielfeldlabel[8][6]);
spielfeldlabelstuhl.add(spielfeldlabel[7][7]);
spielfeldlabelstuhl.add(spielfeldlabel[6][8]);
spielfeldlabelstuhl.add(spielfeldlabel[5][9]);
spielfeldlabelstuhl.add(spielfeldlabel[4][8]);
spielfeldlabelstuhl.add(spielfeldlabel[3][7]);
spielfeldlabelstuhl.add(spielfeldlabel[2][6]);
spielfeldlabelstuhl.add(spielfeldlabel[1][5]);
for(Spielzelle a:spielfeldlabeltisch) {
a.setBackground(Color.ORANGE);
a.setZellart(2);
//final int tischindex = spielfeldlabeltisch.indexOf(a);
/*a.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Tisch: "+tischindex);
stuhlnummer = tischindex;
}
});*/
}
for(Spielzelle b:spielfeldlabelstuhl) {
b.setBackground(Color.RED);
b.setZellart(1);
//final int stuhlindex = spielfeldlabelstuhl.indexOf(b);
/*b.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Stuhl: "+stuhlindex);
tischnummer = stuhlindex;
}
});*/
}
}
}
class Kartenstapel extends JPanel {
public Kartenstapel() {
setLayout(new GridLayout(5,2));
Random rand = new Random();
for(int i=0;i<10;i++) {
JLabel label = new JLabel();
label.setBackground(new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255)));
label.setOpaque(true);
add(label);
}
}
}
class AufbauHilfe {
public static GridBagConstraints createGridBagConstraints(int x, int y, int width, int height, int weightX, int weightY) {
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.gridx = x;
constraints.gridy = y;
constraints.gridwidth = width;
constraints.gridheight = height;
constraints.weightx = weightX;
constraints.weighty = weightY;
return constraints;
}
public static JLabel createRandomBackgroundLabel(String text) {
Random rand = new Random();
JLabel label = new JLabel(text);
label.setBackground(new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255)));
label.setOpaque(true);
return label;
}
}```
Habe lediglich aus JLabels JPanel gemacht.
Es werden daraus folglich die folgenden Layouts erstellt:
```Container contentPane = spielframe.getContentPane();
contentPane.setLayout(gridlayout);
//======
spielframe.add(AufbauHilfe.createRandomBackgroundLabel("LINKSOBEN"), AufbauHilfe.createGridBagConstraints(0, 0, 1, 1, 1, 1));
spielframe.add(AufbauHilfe.createRandomBackgroundLabel("LINKSUNTEN"), AufbauHilfe.createGridBagConstraints(0, 1, 1, 1, 1, 1));
Kartenstapel kartenstapel = new Kartenstapel();
spielframe.add(kartenstapel, AufbauHilfe.createGridBagConstraints(2, 0, 1, 1, 1, 1));
//spielframe.add(AufbauHilfe.createRandomBackgroundLabel("RECHTSOBEN"), AufbauHilfe.createGridBagConstraints(2, 0, 1, 1, 1, 1));
spielframe.add(AufbauHilfe.createRandomBackgroundLabel("RECHTSUNTEN"), AufbauHilfe.createGridBagConstraints(2, 1, 1, 1, 1, 1));
Spielfeld spielpanel = new Spielfeld();
spielframe.add(spielpanel, AufbauHilfe.createGridBagConstraints(1, 0, 1, 2, 3, 3));
spielframe.pack();
spielframe.setLocationRelativeTo(null);```
Hat sich auch nicht verändert zum letzten mal. ;)
Nun stehe ich aber wieder vor dem gleichen Problem, woran ich ohne jeglichen Fortschritt seit November hantiere.
Wie male ich da jetzt Bilder rauf?
Also ich habe in der Klasse Spielzelle meine Paintmethode, mit der ich arbeiten möchte.
Ich möchte nun, ganz primitiv eigentlich, dass er via BufferedImage ein Bild lädt und in die Größe zurechtschneidet, die das JPanel selbst hat und es 1:1 auf 100% Zellgröße da rauf kleistert.
Kann mir das nochmal jemand erklären?
Wenn ich weiß, wie ich ein einziges Bild lade, dann kann ich auch den Rest dazu machen. Dann lädt er auch, abhängig von der Zellart (Tisch oder Stuhl) seine Bilder. Etc. etc.
Ich bitte noch einmal um Erklärung!
Vielen Dank!
Liebe Grüße
Lukas ;)