Hallo,
Ich habe ein eigenes Spiel geschrieben gehabt und habe heute mal wieder einen Blick darauf geworfen.
Ich verstehe nun aber nicht wieso ich die Methode requestFocus() nicht direkt im Konstruktor aufrufen kann, sondern sie in der Methode aufrufen muss. Hier mal mein Code:
(Ich denke mal die Figur und die Hintergrund Klassen erschließen sich)
Hier die "betroffene Stelle"
Ich habe ein eigenes Spiel geschrieben gehabt und habe heute mal wieder einen Blick darauf geworfen.
Ich verstehe nun aber nicht wieso ich die Methode requestFocus() nicht direkt im Konstruktor aufrufen kann, sondern sie in der Methode aufrufen muss. Hier mal mein Code:
Java:
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.Random;
import java.net.URL;
public class Spiel extends JFrame
{
MyPanel panel;
ImageIcon IFenster;
URL UFenster;
public static void main(String args[]) {
new Spiel();
}
public Spiel()
{
super("Go Home");
setResizable(false);
setSize(590,710);
setLocation(300,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
UFenster = getClass().getResource("Haus.png");
IFenster = new ImageIcon(UFenster);
setIconImage(IFenster.getImage());
MyPanel panel = new MyPanel();
add(panel);
setVisible(true);
}
class MyPanel extends JPanel implements KeyListener,ActionListener //KeyListener und ActionListener
{ //werden implementiert
JTextArea t1; //Dekl. der "Zusätze"
JTextArea t2;
JLabel l3;
JButton wuerfel;
JOptionPane gewonnen;
Image Ispielbrett; //Dekl. der Images
Image Irot1;
Image Irot2;
Image Iblau1;
Image Iblau2;
URL Uspielbrett;
URL Urot1;
URL Urot2;
URL Ublau1;
URL Ublau2;
Hintergrund spielbrett;
Figur figur1; //Dekl. der Figuren
Figur figur2;
Figur figur3;
Figur figur4;
Figur aktuelleFigur1;
Figur aktuelleFigur2;
boolean bewegt; // Wurde die aktuelle Figur schonmal bewegt?
public MyPanel()
{
setLayout(null); //null-Layout für die Würfel und Label
setSize(590,710);
loadImages();
spielbrett = new Hintergrund(Ispielbrett,0,0);
wuerfel = new JButton("Wuerfel");
wuerfel.setBounds(0,585,100,100);
wuerfel.addActionListener(this);
t1 = new JTextArea();
t1.setBounds(485,585,100,100);
t1.setFont(new Font("Verdana", 0, 72));
t1.setEditable(false);
t2 = new JTextArea();
t2.setBounds(300,585,100,100);
t2.setFont(new Font("Verdana", 0, 72));
t2.setEditable(false);
l3 = new JLabel();
l3.setBounds(110 ,585,200,100);
l3.setFont(new Font("Verdana", 0, 20));
l3.setText("Aktuelle Figuren:");
figur1 = new Figur(Irot1,155,155); // Ein Feld ist 57!
figur2 = new Figur(Iblau1,383,155); // Home-Feld ist auf: 269/269
figur3 = new Figur(Irot2,155,383);
figur4 = new Figur(Iblau2,383,383);
gewonnen = new JOptionPane();
this.addKeyListener(this);
this.setFocusable(true);
add(t1);
add(t2);
add(l3);
add(wuerfel);
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g); // Damit es nach jeder Bewegung repainted wird!
spielbrett.paintComponent(g); //Zum zeichnen des Spielbretts/der Figuren
figur1.paintComponent(g); // Überschriebene paintComponent(g)-Methoden werden
figur2.paintComponent(g); // (der jeweiligen Klasse) ausgeführt!
figur3.paintComponent(g);
figur4.paintComponent(g);
}
public void loadImages() { // Methode liest die Images
Uspielbrett = getClass().getResource("spielbrett.png");
Urot1 = getClass().getResource("figurrot1.png");
Urot2 = getClass().getResource("figurrot3.png");
Ublau1 = getClass().getResource("figurblau2.png");
Ublau2 = getClass().getResource("figurblau4.png");
try {
Iblau1 = ImageIO.read(Ublau1); // Images werden zugewiesen
Iblau2 = ImageIO.read(Ublau2);
Irot1 = ImageIO.read(Urot1);
Irot2 = ImageIO.read(Urot2);
Ispielbrett = ImageIO.read(Uspielbrett);
} catch(IOException ex) {
System.out.println("Fehler: " + ex.toString());// Falls kein Bild gefunden worden ist
// gebe den Fehler (als String) aus.
}
}
public void option() {
if(figur1.gewonnen() == true || figur2.gewonnen() == true || figur3.gewonnen() == true
|| figur4.gewonnen() == true) { // Wenn irgendeine Figur gewonnen hat...
int eingabe = gewonnen.showConfirmDialog(null, //Speichere den Knopdruck als int
"Möchtest du nochmal spielen?",
"Nochmal spielen?",
gewonnen.YES_NO_CANCEL_OPTION,
gewonnen.PLAIN_MESSAGE);
if(eingabe == 0) { // Wenn "Ja"
figur1 = new Figur(Irot1,155,155);
figur2 = new Figur(Iblau1,383,155);
figur3 = new Figur(Irot2,155,383);
figur4 = new Figur(Iblau2,383,383);
aktuelleFigur1 = null;
aktuelleFigur2 = null;
t1.setText(null);
t2.setText(null);
this.repaint();
}
else if(eingabe == 1) { // Wenn "Nein"
System.exit(0);
}
else if(eingabe == 2) { // Wenn "Abbrechen"
}
}
}
public void kriegeAktuellenSpieler() {
Random r = new Random(); //Random Objekt wird dekl/init
int zufall1 = r.nextInt(4) + 1; //2 Zufallszahlen werden gewürfelt
int zufall2 = r.nextInt(4) + 1;
if(zufall1 == 1) { // Wenn zufall1 == 1 dann aktFig1 = fig1
t1.setText(" 1");
aktuelleFigur1 = figur1;
}
else if(zufall1 == 2) {
t1.setText(" 2");
aktuelleFigur1 = figur2;
}
else if(zufall1 == 3) {
t1.setText(" 3");
aktuelleFigur1 = figur3;
}
else if(zufall1 == 4) {
t1.setText(" 4");
aktuelleFigur1 = figur4;
}
if(zufall2 == 1) {// Wenn zufall2 == 1 dann aktFig2 = fig1
t2.setText(" 1");
aktuelleFigur2 = figur1;
}
else if(zufall2 == 2) {
t2.setText(" 2");
aktuelleFigur2 = figur2;
}
else if(zufall2 == 3) {
t2.setText(" 3");
aktuelleFigur2 = figur3;
}
else if(zufall2 == 4) {
t2.setText(" 4");
aktuelleFigur2 = figur4;
}
this.requestFocus();
}
public void actionPerformed(ActionEvent e) { //ActionListener-Methode
if(figur1.gewonnen() == false && figur2.gewonnen() == false && figur3.gewonnen() ==
false && figur4.gewonnen() == false) {
if(e.getSource() == wuerfel) { // Wenn der Knopf gedrückt wird
kriegeAktuellenSpieler(); // Bekomme aktuellenSpieler(bzw. gebe auf Areas aus)
bewegt = false; // Und die Figuren dürfen sich bewegen
}
}
else { //Wenn eine Figur gewonnen hat..
option(); // Zeige mir das JOptionPane
}
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) { // Wenn Tasten "gedrückt"
if(bewegt == false) { // Nur wenn bewegt = false!
if(aktuelleFigur1 != null && aktuelleFigur2 != null) { // Wenn aktFig einen Wert hat
if(e.getKeyCode() == KeyEvent.VK_RIGHT || e.getKeyCode() == KeyEvent.VK_D) {
aktuelleFigur1.x += 57; // Bewege um ein Feld nach Rechts,
aktuelleFigur2.x += 57; // Bewege um ein Feld nach Rechts
this.repaint(); // Zeichne das Panel neu(Um die Veränderung sichtbar zu machen)
bewegt = true; // Setze bewegt = true, damit die keyPressed
option(); // nicht betreten werden kann solange man nicht nochmal würfelt
}
else if(e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_A) {
aktuelleFigur1.x -= 57;
aktuelleFigur2.x -= 57;
this.repaint();
bewegt = true;
option();
}
else if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_W) {
aktuelleFigur1.y -= 57;
aktuelleFigur2.y -= 57;
this.repaint();
bewegt = true;
option();
}
else if(e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_S) {
aktuelleFigur1.y += 57;
aktuelleFigur2.y += 57;
this.repaint();
bewegt = true;
option();
}
}
}
if(e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_SPACE) {
if(figur1.gewonnen() == false && figur2.gewonnen() == false && figur3.gewonnen() ==
false && figur4.gewonnen() == false) {
kriegeAktuellenSpieler();
bewegt = false;
}
else {
option();
}
}
if(e.getKeyCode() == KeyEvent.VK_H) {
JOptionPane secret = new JOptionPane();
int eingabe = secret.showConfirmDialog(null,
"Drück nicht 'h' du huanschmock!\n-By Hendrik und Co. KG",
"Secret!",
secret.CLOSED_OPTION,
secret.PLAIN_MESSAGE);
}
}
public void keyTyped(KeyEvent e) {
}
}
}
Hier die "betroffene Stelle"
Java:
public void kriegeAktuellenSpieler() {
Random r = new Random(); //Random Objekt wird dekl/init
int zufall1 = r.nextInt(4) + 1; //2 Zufallszahlen werden gewürfelt
int zufall2 = r.nextInt(4) + 1;
if(zufall1 == 1) { // Wenn zufall1 == 1 dann aktFig1 = fig1
t1.setText(" 1");
aktuelleFigur1 = figur1;
}
else if(zufall1 == 2) {
t1.setText(" 2");
aktuelleFigur1 = figur2;
}
else if(zufall1 == 3) {
t1.setText(" 3");
aktuelleFigur1 = figur3;
}
else if(zufall1 == 4) {
t1.setText(" 4");
aktuelleFigur1 = figur4;
}
if(zufall2 == 1) {// Wenn zufall2 == 1 dann aktFig2 = fig1
t2.setText(" 1");
aktuelleFigur2 = figur1;
}
else if(zufall2 == 2) {
t2.setText(" 2");
aktuelleFigur2 = figur2;
}
else if(zufall2 == 3) {
t2.setText(" 3");
aktuelleFigur2 = figur3;
}
else if(zufall2 == 4) {
t2.setText(" 4");
aktuelleFigur2 = figur4;
}
this.requestFocus();
}