Schiffe versenken JButton Schiffe mit GUI verbinden Hilfe!

Husamoli

Mitglied
Hallo

Ich brauche Hilfe ich möchte für ein Schiffe versenken Spiel.
Ich bin auch mit dem Feld soweit fertig allerdings lassen sich meine JButton Schiffe nicht in das GUI Spielfeld integrieren vieleicht kann mir jemand helfen ich wolte dies mit einem Action Listener machen aber dies funktioniert nicht so ganz.

Dies ist die Klasse der Schiffe

package Schiffeversenken;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
//position erstellen, attribut schifflänge als array, evtl. bild einfügen, treffer methode,
public class Schiff implements ActionListener {
int schifflänge[];
int postition;
JFrame buttonSchiffe;
JButton einerSchiff;
JButton zweierSchiff;
JButton dreierSchiff;
JButton fertigGesetzt;
public Schiff() {
this.postition = 1;
}
public void buttonsFürSchiffeSetzen() {
this.buttonSchiffe = new JFrame("Schiffe setzten");
this.einerSchiff = new JButton("Ein-Feld Schiff");
this.zweierSchiff = new JButton("Zwei-Feld Schiff");
this.dreierSchiff = new JButton("Drei-Feld Schiff");
this.fertigGesetzt = new JButton("Fertig");
buttonSchiffe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
buttonSchiffe.setSize(200, 200);
buttonSchiffe.setLocation(1090, 10);
buttonSchiffe.setLayout(new FlowLayout());
buttonSchiffe.getContentPane().add(einerSchiff);
buttonSchiffe.getContentPane().add(zweierSchiff);
buttonSchiffe.getContentPane().add(dreierSchiff);
buttonSchiffe.getContentPane().add(fertigGesetzt);
einerSchiff.addActionListener(this);
zweierSchiff.addActionListener(this);
dreierSchiff.addActionListener(this);



buttonSchiffe.setVisible(true);
}

public void actionPerformed(ActionEvent e) { // Schiffe Buttons den Schifflängen zuweisen

if (e.getSource() == this.einerSchiff) { // get Source = Das Objekt, auf dem das Ereignis anfänglich aufgetreten ist. Rückgabe bei dem Objekt wo das Ereignis anfänglich aufgetreten ist


einerSchiff.setEnabled(false); // set enabled aktiviert oder deaktiviert die Schaltfläche
Spielfeld s = new Spielfeld("");
s.add(einerSchiff, schifflänge[0]);

s.setBackground(Color.BLUE); //funktioniert nicht
schifflänge[2] = schifflänge[0];
//((Component) e.getSource()).setBackground(Color.BLACK); //funktioniert nicht,


} else if (e.getSource() == this.zweierSchiff) {

zweierSchiff.setEnabled(false);
schifflänge[2] = schifflänge[1];
} else if (e.getSource() == this.dreierSchiff) {
dreierSchiff.setEnabled(false);
schifflänge[2] = schifflänge[2];




Und dies die Klasse der GUI
package Schiffeversenken;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.rmi.Remote;
import java.rmi.RemoteException;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public class GUI extends JFrame implements ActionListener, Interface {
private static final long serialVersionUID = 1L;
private JLabel Tietel;
private JLabel Name;
private JLabel Name2;
private JButton Start1;
private JButton Beenden;
private JTextField textName;
private JTextField textName2;
public GUI() throws RemoteException {
this.setTitle("Schiffe versenken");
this.Tietel = new JLabel("Willkomen zum Schiffeversenken");
this.Name = new JLabel("Name 1");
this.Name2 = new JLabel("Name 2");
this.Start1 = new JButton("Start");
this.Beenden = new JButton("Beenden");
this.textName = new JTextField();
this.textName2 = new JTextField();
new JTextField();
this.setVisible(true);
Beenden.addActionListener(this);
add(Beenden);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 500);
this.setLayout(new GridBagLayout());
this.ordneAn();
this.Listenererstellen();
this.setVisible(true);
}
public void ordneAn() throws RemoteException {
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(4, 4, 4, 4);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 0;
this.getContentPane().add(Tietel, c);
c.gridx = 0;
c.gridy = 1;
this.getContentPane().add(Name, c);
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 3;
this.getContentPane().add(textName, c);
c.gridx = 2;
c.gridy = 1;
this.getContentPane().add(Name2, c);
c.gridx = 2;
c.gridy = 2;
c.gridwidth = 2;
this.getContentPane().add(textName2, c);
c.gridx = 0;
c.gridy = 3;
c.gridwidth = 1;
this.getContentPane().add(Start1, c);
c.gridx = 3;
c.gridy = 3;
c.gridwidth = 1;
this.getContentPane().add(Beenden, c);
}
@Override
public void actionPerformed(ActionEvent ae) {
Object object = ae.getSource();
if (object.equals(Beenden)) {
System.exit(0);
}
}
public void Listenererstellen() throws RemoteException {
Start1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Spielfeld feld1 = new Spielfeld();
Spielfeld feld2 = new Spielfeld("baba");
Schiff schiffe = new Schiff();
schiffe.buttonsFürSchiffeSetzen();
}
});
}
}


Bin über jede Hilfe sehr dankbar!
 
  • Bitte setze deinen Code in Code Tags [code=java]hier dein code[/code]. Das erhöht die Chance, dass dir jemand hilft, ungemein.
  • Was hast du mit dem 2. JFrame in Schiff vor? Mehrere JFrames ist eher untypisch. Wenn dann empfehle ich JDialog.
  • Du hast für fertigGesetzt keinen ActionListener
  • Umlaute in Java Code können Probleme machen, z.B. buttonsFürSchiffeSetzen()
  • bitte schreibe Methoden und Variablen immer klein z.B. Listenererstellen()
  • schifflänge[2] = schifflänge[2]; ?????
  • Ich sehe dass du mit RMI arbeiten willst. Ich würde aber GUI und RMI Kommunikation klar voneinander trennen.
  • ...

Alles in allem für mich absolut konfus, ich weiß nicht wo hier etwas anfängt, wo es aufhört und wozu es gedacht ist. Bringe mehr Struktur die in Sache (eventuell MVC?) und die Chance ist hoch, dass du shcon selbst deine Stolpersteine aus dem Weg räumen kannst.
 

Zurück
Oben