Hallo!
Ich habe eine Klasse die von JPanel abgeleitet ist. Auf diese Klasse sollen Instanzen einer anderen Klasse die von JLabel abgeleitet ist gezeichnet werden. Dabei hab ich festgestellt, dass die Bounds und Alignments hinten und vorne nicht Passen. Wenn ich eine Instanz der "JLabel"-Klasse erzeuge, sollen gleichzeitig die Bounds etc gesetzt werden.
Problem dabei ist, dass ich später nicht mehr an diese Werte heran komme bzw das sie überhaupt keine Rolle im weiteren Programmablauf haben... Habe auch schon probiert, die Bounds etc in der JPanel-Klasse zu setzen. Leider auch ohne Erfolg! Hier die Klassen:
JPanel:
JLabel:
Wo könnte da der Fehler versteckt sein? Hab schon überlegt die Methode setBounds() zu überschreiben, aber im Prinzip soll da ja eh die Funktionalität der Superklasse hinterstecken. Würde also in meinen Augen auch nicht wirklich Sinn machen!
Gruß manuche
Ich habe eine Klasse die von JPanel abgeleitet ist. Auf diese Klasse sollen Instanzen einer anderen Klasse die von JLabel abgeleitet ist gezeichnet werden. Dabei hab ich festgestellt, dass die Bounds und Alignments hinten und vorne nicht Passen. Wenn ich eine Instanz der "JLabel"-Klasse erzeuge, sollen gleichzeitig die Bounds etc gesetzt werden.
Problem dabei ist, dass ich später nicht mehr an diese Werte heran komme bzw das sie überhaupt keine Rolle im weiteren Programmablauf haben... Habe auch schon probiert, die Bounds etc in der JPanel-Klasse zu setzen. Leider auch ohne Erfolg! Hier die Klassen:
JPanel:
Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JLabel;
import javax.swing.JPanel;
import ships.Ship;
public class AdditionPanel extends JPanel {
private static final long serialVersionUID = -4483849173455158918L;
public JLabel l1, l2, l3, l4, l5;
public AdditionPanel(int x, int y){
this.setBounds (x, y, 315, 400);
this.setMaximumSize (new Dimension (315, 400));
this.setBackground (Color.GREEN);
doInit();
this.setVisible (true);
}
private void doInit(){
Ship s1 = new Ship (2, "s1");
Ship s2 = new Ship (3, "s2");
Ship s3 = new Ship (3, "s3");
Ship s4 = new Ship (4, "s4");
Ship s5 = new Ship (5, "s5");
this.add (s1);
this.add (s2);
this.add (s3);
this.add (s4);
this.add (s5);
this.repaint();
}
public void paintComponent (Graphics g){
super.paintComponent (g);
g.setColor (Color.BLACK);
g.drawLine (0, 0, 0, this.getHeight());
g.drawLine (this.getWidth() - 1, 0, this.getWidth() - 1, this.getHeight());
g.drawLine (0, 0, this.getWidth(), 0);
g.drawLine (0, this.getHeight() - 1, this.getWidth(), this.getHeight() - 1);
}
public void doPaint(){
this.repaint();
}
}
Code:
package ships;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JLabel;
public class Ship extends JLabel{
private static final long serialVersionUID = 1654429558096042889L;
private boolean damaged[];
private int size;
private String name;
private static BufferedImage bow;
private static BufferedImage deck;
private static BufferedImage aft;
private static BufferedImage bow_damaged;
private static BufferedImage deck_damaged;
private static BufferedImage aft_damaged;
public Ship(int pSize, String pName){
this.name = pName;
this.size = pSize;
damaged = new boolean[size];
for (int x = 0; x < size; x++){
damaged[x] = false;
}
doInit();
}
private void doInit(){
Dimension panelDimension = new Dimension (30 * size, 30);
this.setPreferredSize (panelDimension);
this.setMinimumSize (panelDimension);
this.setBounds (10, 10 + (30 * (size - 2)), 30 * size, 30);
this.setAlignmentX (10);
this.setAlignmentY (10 + (30 * (size - 2)));
this.setName (name);
try{
bow = ImageIO.read (new File ("D:\\Eigene Dateien\\Programme\\Schiffeversenken\\bin\\images\\ship\\bow.gif"));
deck = ImageIO.read (new File ("D:\\Eigene Dateien\\Programme\\Schiffeversenken\\bin\\images\\ship\\deck.gif"));
aft = ImageIO.read (new File ("D:\\Eigene Dateien\\Programme\\Schiffeversenken\\bin\\images\\ship\\aft.gif"));
bow_damaged = ImageIO.read (new File ("D:\\Eigene Dateien\\Programme\\Schiffeversenken\\bin\\images\\ship\\bow_damaged.gif"));
deck_damaged = ImageIO.read (new File ("D:\\Eigene Dateien\\Programme\\Schiffeversenken\\bin\\images\\ship\\deck_damaged.gif"));
aft_damaged = ImageIO.read (new File ("D:\\Eigene Dateien\\Programme\\Schiffeversenken\\bin\\images\\ship\\aft_damaged.gif"));
}catch (IOException e){}
}
public boolean isDamagedAt (int pIndex){
return damaged[pIndex];
}
public void setDamagedAt (int pIndex){
damaged[pIndex] = true;
}
public boolean isDestroyed(){
int damage = 0;
for (int x = 0; x < damaged.length; x++){
if (damaged[x] = true){
damage++;
}
}
if (damage + 1 == damaged.length){
return true;
}
return false;
}
public void paintComponent (Graphics g){
super.paintComponent (g);
if (!isDamagedAt (0)){
g.drawImage (bow, 0 , 0, this);
}else{
g.drawImage (bow_damaged, 0 , 0, this);
}
if (size > 2){
for (int x = 0; x <= size - 3; x++){
if (!isDamagedAt (x + 1)){
g.drawImage (deck, 30 * (x + 1) , 0, this);
}else{
g.drawImage (deck_damaged, 30 * (x + 1) , 0, this);
}
}
}
if (!isDamagedAt (size - 1)){
g.drawImage (aft, (30 * size) - 30, 0, this);
}else{
g.drawImage (aft_damaged, (30 * size) - 30, 0, this);
}
}
public void refreshLabel(){
this.repaint();
}
}
Gruß manuche