L
lemalsaint
Gast
Hallo alle, zum wiederholent Male habe ich eine Frage zu meiner Unisemesterarbeit "Schiffeversenken"
habe zwischenzeitlich ein geeignetes Spielfeld(2dimensionales JButton(extendet)Array), Schiffe und eine Startklasse geschrieben. Jetzt habe ich eigene Klasse für einen MouseListener, die bei rechtsklick horizontale und bei linksklick vertikale schiffe setzt. Eclipse erkennt keine Fehler,aber der Mouselistener tut nix.
Ich poste mal die GUIKlasse, die Klasse für die Schiffe und die MouseListener Klasse.
Ich könnte mir vorstellen dass ich das Fenster bzw. die dazugehörigen Panels irgendwo falsch instanziert habe, aber ich probier seit tagen und es ändert sich nix...
wäre super wenn jemand den Fehler findet...
Danke sehr für Bemühungen
Grüße
Olli
Hier mal die Fenster:
hier dann die Schiffe
und dann noch der MouseListener
ergänzend mal noch mein extendeter JButton:
habe zwischenzeitlich ein geeignetes Spielfeld(2dimensionales JButton(extendet)Array), Schiffe und eine Startklasse geschrieben. Jetzt habe ich eigene Klasse für einen MouseListener, die bei rechtsklick horizontale und bei linksklick vertikale schiffe setzt. Eclipse erkennt keine Fehler,aber der Mouselistener tut nix.
Ich poste mal die GUIKlasse, die Klasse für die Schiffe und die MouseListener Klasse.
Ich könnte mir vorstellen dass ich das Fenster bzw. die dazugehörigen Panels irgendwo falsch instanziert habe, aber ich probier seit tagen und es ändert sich nix...
wäre super wenn jemand den Fehler findet...
Danke sehr für Bemühungen
Grüße
Olli
Hier mal die Fenster:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//mediatracker
public class Fenster implements ActionListener{
private Feld spielfeld[][];
private Feld spielfeldPC[][];
int eingabezeile;
public Fenster()
{
JFrame spielfeld = spielfeld();
JPanel grundPanel = grundPanel();
JPanel spielerPanel= spielfeldPanel();
JPanel pcPanel = spielfeldPanel();
grundPanel.add(spielerPanel);
grundPanel.add(pcPanel);
spielfeld.add(grundPanel);
spielfeld.setVisible(true);
}
//Methode zum erzeugen des Fensters,auf dem das Spielfeld angezeigt wird
//plus Dialog,der die gewünschte Spielfeldgröße abfragt
private JFrame spielfeld(){
JFrame frame = new JFrame("Schiffeversenken");
JFrame.setDefaultLookAndFeelDecorated(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dialog dialog = new Dialog(frame);
eingabezeile = dialog.gibGroesse();
frame.setSize((eingabezeile*60),eingabezeile*30);
return frame;
}
//Methode zum erzeugen des Grundpanels
private JPanel grundPanel()
{
JPanel grundPanel = new JPanel();
grundPanel.setSize(eingabezeile*60, eingabezeile*30);
grundPanel.setLayout(new GridLayout(1,2));
return grundPanel;
}
//methode zum erzeugen der Spielfeldpanels
private JPanel spielfeldPanel() {
JPanel Panel = new JPanel();
GridLayout gridbag = new GridLayout(eingabezeile,eingabezeile);
Panel.setSize(eingabezeile*30,eingabezeile*30);
Panel.setLayout(gridbag);
Panel.setBackground(Color.RED);
spielfeld= new Feld[eingabezeile][eingabezeile];
for( int a=0;a<(eingabezeile);a++)
{
for (int b=0;b<eingabezeile;b++)
{
spielfeld[a][b] = new Feld(a,b);
Panel.add(spielfeld[a][b]);
}}
Panel.setVisible(true);
return Panel;
}
public void actionPerformed(ActionEvent event)
{
for( int a=0; a<eingabezeile; a++ )
{
for( int b=0; b<eingabezeile; b++ )
{
// Ausloeser des Events ermitteln und mit den Buttons vergleichen
if( event.getSource().equals( spielfeld[a][b] ) )
{
spielfeld[a][b].setBackground(Color.BLUE);
Icon bild = new ImageIcon("7.jpg");
spielfeld[a][b].setIcon(bild);
}
}
}
}
public Feld[][] gibSpielfeld(Fenster f)
{
return this.spielfeld;
}
}
Code:
import java.awt.Color;
public class Schiffe {
private Feld spielfeld[][];
public int posX;
public int posY;
public int laenge;
public String klasse;
private Fenster frame;
//private boolean[][] istGetroffen;
private boolean horizontal;
public Schiffe(int posX,int posY,String name, int laenge,boolean horizontal)
{
posX=this.posX;
posY=this.posY;
klasse=name;
laenge=this.laenge;
//istGetroffen[posX][posY]=false;
horizontal= this.horizontal;
}
public int gibtPosX(Schiffe schiff)
{
int x= schiff.posX;
return x;
}
public int gibtPosY(Schiffe schiff)
{
int y= schiff.posY;
return y;
}
public int gibLaenge(Schiffe schiff)
{
int z = schiff.laenge;
return z;
}
public String gibKlasse(Schiffe schiff){
String Name = schiff.klasse;
return Name;
}
public void spielfeld()
{
spielfeld = frame.gibSpielfeld(frame);
}
public void setzeSchiff(Schiffe schiff)
{int a = schiff.gibtPosX(schiff);
int b = schiff.gibtPosY(schiff);
if (schiff.horizontal=false)
for(int z=schiff.gibtPosX(schiff);z<(a+schiff.gibLaenge(schiff));z++)
{
spielfeld[z][posY].setBackground(Color.RED);
spielfeld[z][posY].istBesetzt = true;
}
if (schiff.horizontal = true)
for(int y=schiff.gibtPosY(schiff);y<(b+schiff.gibLaenge(schiff));y++){
spielfeld[posX][y].setBackground(Color.RED);
spielfeld[posX][y].istBesetzt = true;
}
}
}
Code:
import java.awt.event.*;
public class SchiffeSetzen implements MouseListener {
private int laenge =5;
private boolean horizontal;
public SchiffeSetzen()
{
}
public void mouseClicked(MouseEvent e)
{
Feld feld = (Feld)e.getSource();
int a = feld.gibSpalte(feld);
int b = feld.gibZeile(feld);
horizontal =true;
if ((e.getModifiers() & InputEvent.BUTTON3_MASK)== InputEvent.BUTTON3_MASK)
{horizontal =true;}
if ((e.getModifiers() & InputEvent.BUTTON1_MASK)== InputEvent.BUTTON1_MASK)
{ horizontal =false;}
Schiffe schiff = new Schiffe(a,b,"",laenge,this.horizontal);
schiff.setzeSchiff(schiff);
laenge =laenge--;
}
public void mousePressed(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
}
ergänzend mal noch mein extendeter JButton:
Code:
import javax.swing.*;
/**
*
* @Olli
*Die Klasse Feld erzeugt JButtons mit erweiterten Eigenschaften
*Die Buttons vom Typ Feld halten Informationen wo der Button liegt(XundY Position),
*ob das Feld(=Button) mit einem Schiff besetzt ist und ob bereits auf dieses Feld geschossen wurde
*
*/
public class Feld extends JButton {
int zeile;
int spalte;
boolean istBesetzt;
boolean beschossen;
public Feld(int i , int j)
{
zeile = i;
spalte=j;
istBesetzt=false;
beschossen=false;
}
/**
* Methode liefert den Y-Wert der Buttonposition
* @return
*/
public int gibZeile(Feld feld)
{
return feld.zeile;
}
/**
* Methode liefert den X-Wert der Buttonposition
* @return
*/
public int gibSpalte(Feld feld)
{
return feld.spalte;
}
/**
* methode sagt,ob das Feld ein Schiff beherbergt
* @return
*/
public boolean gibStatus(Feld feld)
{
return feld.istBesetzt;
}
public boolean gibSchuss(Feld feld)
{
return feld.beschossen;
}
}