Ich arbeite derzeit an einem Schulprojekt namens schiffe versenken. lch habe derzeit ein Problem mit g.setColor... .
Ich habe dieses Feld angelegt in der auch die markiereSchiffeGesetztSpieler1 ist. Ich arbeite noch nicht lange mit awt bzw Java vor allem nicht an einer GUI. tipps und tricks wären dabei ebenso sehr hilfreich
dann kommt in der gleichen klasse die methode die durch den Aktion Listener des Buttons aufgerufen wird
und dann habe ich die Klasse Button in der alle buttons sind. ich habe jetzt mal nur den einen Button der für das ganze zuständig ist in den Code kopiert. Alle anderen Buttons haben damit einfach keine Funktion.
In der Klasse Button werden beim drücken des Buttons Spiel Starten( Bu_Sp_Start) die Felder aufgebaut und die methode markiereSchiffeGesetztSpieler1 aufgerufen. Dabei wird alle Dings das Feld das in diesem Fall rot gesetzt werden soll nur schwarz markiert.
am Ende habe ich noch meine MainGui methode in der alles zusammen gebaut wird.
Das lustige dabei ist (wir benutzen in der schule BlueJ damit kann man Objekte ohne Main Methode erstellen) wenn ich also das Objekt erstelle kann ich mit Blue J in der Klasse Spielfeld die Methode markiereSchiffeGesetztSpieler1(x,y) aufrufe - davor noch den übergabeparameter frame und das frame.add auskommentiert-, dann funktioniert diese einwandfrei. D.h. der Fehler muss irgendwo beim aufrufen in anderen klassen passieren.
Vielleicht kann mir jemand helfen.
Ich habe dieses Feld angelegt in der auch die markiereSchiffeGesetztSpieler1 ist. Ich arbeite noch nicht lange mit awt bzw Java vor allem nicht an einer GUI. tipps und tricks wären dabei ebenso sehr hilfreich
Java:
import java.awt.*;
import java.awt.event.*;
public class Spielfelder extends Frame{
private static int hoehe1 = 10;
private static int breite1 = 10;
static Canvas Spieler1SpielFeldBackground = new Canvas ();
private static Canvas Spieler1SpielFeld[][] = new Canvas[breite1][hoehe1];
public void Spieler1SpielFeldZeichnen( Frame frame)
{
int Y =85;
int X = 60;
//int name = 0;
for (int j = 0; j < hoehe1; j++)
{
for (int k = 0; k < breite1; k++)
{
//name++;
Spieler1SpielFeld[j][k] = new Canvas ()
{
public void paint (Graphics g)
{
super.paint(g);
g. setColor (Color. cyan);
g. clearRect (0, 0, 47, 47);
g. fillRect (0, 0, 47, 47);
}
};
Y= Y+50;
Spieler1SpielFeld[j][k]. setSize (47, 47);
Spieler1SpielFeld[j][k]. setLocation (X, Y);
//System.out.println(y);
frame. add (Spieler1SpielFeld[j][k]);
Spieler1SpielFeld[j][k].revalidate();
//System.out.println("added");
//System.out.println(k);
//System.out.println(name);
}
X = X+50;
Y=85;
}
Spieler1SpielFeldBackground = new Canvas ()
{
public void paint (Graphics g)
{
super.paint(g);
g. setColor (Color. black);
g. clearRect (0,00, 507, 507);
g. fillRect (0,0,507,507);
}
};
Spieler1SpielFeldBackground. setSize (512, 510);
Spieler1SpielFeldBackground. setLocation (55, 130);
frame. add (Spieler1SpielFeldBackground);
Spieler1SpielFeldBackground.revalidate();
}
public static void markiereSchiffeGesetztSpieler1(int x, int y, Frame frame)
{
Graphics g=Spieler1SpielFeld[x][y].getGraphics();
g.setColor (Color. red); // ändert die aktuelle Farbe
g.clearRect (0, 0, 47, 47);
g.fillRect (0, 0, 47, 47);
frame.add(Spieler1SpielFeld[x][y]);//setzt das kästchen sichtbar
}
}
dann kommt in der gleichen klasse die methode die durch den Aktion Listener des Buttons aufgerufen wird
Java:
public void Wi_Sp_Start(ActionEvent evt, Frame frame)
{
frame.setSize (1400, 800);
System.out.println("Größe auf Wi_Sp_Start geändert");
frame.setBackground(Color.yellow);
System.out.println("Background auf Wi_Sp_Start geändert");
Spieler1SpielFeldZeichnen (frame);
}
In der Klasse Button werden beim drücken des Buttons Spiel Starten( Bu_Sp_Start) die Felder aufgebaut und die methode markiereSchiffeGesetztSpieler1 aufgerufen. Dabei wird alle Dings das Feld das in diesem Fall rot gesetzt werden soll nur schwarz markiert.
Java:
import java.awt.*;
import java.awt.event.*;
public class Buttons // extends Frame
{
private static Frame Window_Bu;
static Button Bu_Sp_Start = new Button(); // Button starten @ startscreen
static Button Bu_Be_Start = new Button(); // Butto Beschreibung @startscreen
static Button Exit = new Button(); // Buttonexit for all
static Button Bu_Be_Spiel = new Button(); // Button Beschreibung wäh Spiels
static Button Bu_RSp = new Button(); //Button von der Beschreibung zum Spiel
static Beschreibung Wi_Bu_Be_Start = new Beschreibung();
static Beschreibung Wi_Bu_Be_Spiel = new Beschreibung();
static Spielfelder Wi_Bu_Sp_Start = new Spielfelder();
private static int hoehe1 = 10;
private static int breite1 = 10;
private static Spielfelder Spieler1SpielFeld = new Spielfelder();
public Buttons()
{
}
public void set_Bu_Sp_Start(Frame frame)
{
Bu_Sp_Start.setBounds(40, 63, 100, 50);
Bu_Sp_Start.setLabel("Spiel Starten");
Bu_Sp_Start.setBackground(Color.green);
System.out.println("Bu_Sp_Starte erstellt");
Bu_Sp_Start.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt) {
Wi_Bu_Sp_Start.Wi_Sp_Start( evt, frame);
Spieler1SpielFeld.markiereSchiffeGesetztSpieler1(5, 5, frame);
System.out.println("Spieler 1 makiert addet");
}
});
frame.add(Bu_Sp_Start);
Bu_Sp_Start.revalidate();
System.out.println("Bu_Sp_Start addet");
}
am Ende habe ich noch meine MainGui methode in der alles zusammen gebaut wird.
Java:
import java.awt.*;
import java.awt.event.*;
public class MainGui
{
private static Frame fenster = null;
private static Buttons Bu_Be_Start = new Buttons();
private static Buttons Exit = new Buttons();
private static Buttons Bu_Sp_Start = new Buttons();
public MainGui()
{
if (fenster == null)
{
fenster = new Frame("Battleshipdown");
fenster. setResizable (false);
fenster. setSize (400, 150);
fenster. setVisible (true);
fenster. setLayout (null);
fenster. setBackground (Color. black);
fenster. addWindowListener(new WindowAdapter()
{
public void windowClosing (WindowEvent event)
{
System.exit(0);
};
}
);
Bu_Be_Start.set_Bu_Be_Start(fenster);
Bu_Sp_Start.set_Bu_Sp_Start(fenster);
}
}
}
Das lustige dabei ist (wir benutzen in der schule BlueJ damit kann man Objekte ohne Main Methode erstellen) wenn ich also das Objekt erstelle kann ich mit Blue J in der Klasse Spielfeld die Methode markiereSchiffeGesetztSpieler1(x,y) aufrufe - davor noch den übergabeparameter frame und das frame.add auskommentiert-, dann funktioniert diese einwandfrei. D.h. der Fehler muss irgendwo beim aufrufen in anderen klassen passieren.
Vielleicht kann mir jemand helfen.