java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 22.05.2008, 19:05   #1 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 14.04.2008
Fachbeiträge: 14
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard MouseListener funzt net.

also Syntaktisch ist alles klar aber ich habe kein plan wieder der MouseListener nix tut...
also der soll bei klick nen Point per DrawPoint.DrawPoint(e.getX(), e.getY(), actualcolor); zeichnen...
debugtechnisch in der Main aufrufen funktioniert es aber per mouselistener nicht...
was mach ich da falsch ???


hier der code

Code:
package guiGo2;
/*DrawWindow.java*/

import java.awt.Color;
import java.awt.Graphics;
import java.awt.GraphicsDevice;
import java.awt.Window;
import javax.swing.JFrame;
import java.awt.MouseInfo.*;
import java.awt.event.*;
import java.awt.event.MouseListener;

public class DrawWindow implements Runnable, MouseListener {

    private static int win_width,  win_height,  field_h,  field_w;
    static Graphics g;
    static Color actualcolor;
    static Window myWindow;
    static JFrame F = new JFrame("Go");
    static DrawField drawField = new DrawField(400, 400);

    DrawWindow() { // konstruktor
        this.win_height = 500;
        this.win_width = 600;
        this.field_h = 400;
        this.field_w = 400;
        this.actualcolor =Color.RED; // SET DEFAULTCOLOR  FOR DEBUGGING       
    }

    public void run() {
        F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        F.setSize(win_width, win_height);
        F.setVisible(true);        
        F.addMouseListener(this);
    }

    @SuppressWarnings("static-access")
    public static void main(String[] args) {
        (new Thread(new DrawWindow())).start();
        drawField.setLayout(null);
        F.add(drawField);
            DrawPoint.DrawPoint(80, 100, Color.BLUE);  //debugging point... klappt wunderbar 
    }

    public void mouseClicked(MouseEvent e) {
        //drawpoint only debugging um zu wissen ob der hässliche Mouselistener funzt
        DrawPoint.DrawPoint(e.getX(), e.getY(), actualcolor);  
        //        setArray[e.getX()][e.getY()] = "PLAYER";   
        /* eigentlich diese vorläufige nicht angepasste anweisung...  
         *  muss e.getxy muss aber noch ans array angepasst werden... 
         *sonst ist compiler böse... ;)
        **/
    }

    public void mousePressed(MouseEvent e) {
// NOP();
    }

    public void mouseReleased(MouseEvent e) {
// NOP();
    }

    public void mouseEntered(MouseEvent e) {
// NOP();
    }

    public void mouseExited(MouseEvent e) {
// NOP();
    }
}
__________________
Keine Relevante Signatur
------------------
http://www.mymirage.eu
siddy1981 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 22.05.2008, 21:01   #2 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.742
Abgegebene Danke: 0
Erhielt 1.640 Danke für 1.485 Beiträge
*in die Kristallkugel guckt* Rufst du irgendwo "getGraphics" auf?
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 22.05.2008, 22:19   #3 (permalink)
Neuer Benutzer
byte
Themenstarter
 
Registriert seit: 14.04.2008
Fachbeiträge: 14
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
hier hab ich noch mal drawfield und drawpoint ->

Code:
package guiGo2; 
/* 
* DrawPoint.java 
*/ 
import java.awt.*; 
import javax.swing.*; 

public class DrawPoint extends JLabel { 

    private Color color = Color.RED; 

    public DrawPoint(int x, int y,Color c) { 
        setBounds(x, y, 20, 20); 
       this.color =c;
    } 

    public void drawPoint(int x, int y) { 
        setLocation(x, y); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        Graphics2D g2D = (Graphics2D) g; 
        g2D.setColor(color); 
        g2D.fillOval(0, 0, 20, 20); 
    } 
     

public static void DrawPoint(int x, int y, Color c){
    
DrawWindow.drawField.add(new DrawPoint(x, y,c));

}

}

Code:
package guiGo2; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.*; 
import java.awt.*; 
/*DrawField.java*/
public class DrawField extends JPanel { 
Color lineColor = Color.BLACK; 
Color background = Color.GRAY; 

    public DrawField(int x, int y) { 
        this.setSize(x, y); 
        this.setBackground(background); 
    } 
    

    @Override 
    public void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        Graphics2D g2D = (Graphics2D) g; 
        for (int i = 0; i <= 400; i += 20) { 
            g2D.setColor(lineColor); 
            g2D.drawLine(i, 400, i, 0); 
            g2D.drawLine(400, i, 0, i); 
        } 

    } 
}
aber sonst nein getgraphics rufe ich nicht auf...
dachte dass muss ich auch nicht weil sonst alles funktioniert...
__________________
Keine Relevante Signatur
------------------
http://www.mymirage.eu
siddy1981 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 22.05.2008, 22:26   #4 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.742
Abgegebene Danke: 0
Erhielt 1.640 Danke für 1.485 Beiträge
Mit diesem static-murks kann ja auch niemand rechnen..

DrawWindow.drawField.add(new DrawPoint(x, y,c));
DrawWindow.drawField.validate();
DrawWindow.drawField.repaint();
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 22.05.2008, 22:33   #5 (permalink)
Neuer Benutzer
byte
Themenstarter
 
Registriert seit: 14.04.2008
Fachbeiträge: 14
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
ahhh thanks... es funzt.... und jetzt die frage : wieso static murks ??
wie könnte man es denn besser machen ?? bzw effektiver ??
__________________
Keine Relevante Signatur
------------------
http://www.mymirage.eu
siddy1981 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 23.05.2008, 11:35   #6 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.742
Abgegebene Danke: 0
Erhielt 1.640 Danke für 1.485 Beiträge
Ganz allgemein sollte man fields "fast nie" static machen. Das ist keine Objektorientierte Modellierung (im eigentlichen Sinn). Stell dir nur mal vor, du willst irgendwann mal zwei DrawFields nebeneinander anzeigen (ist aber auch nur ein Beispiel).

Ein kleiner Ausflug, weil mit langweilig ist... war: Eine Modellierung, die in dem Sinne "gut" ist, dass sie skalierbar und sehr allgemein anwendbar ist (und schließlich will man ja i.a. nicht ein Spiel schreiben, sondern was lernen, was man später noch brauchen kann) ist das Model-View-Controller-Pattern (MVC-Pattern).

Du könntest dein Go schreiben, und das GUI komplett ignorieren. Schreib' dein Spiel als Spiel als Spiel und nur als Spiel. Überleg' dir, welche Eigenschaften (fields, "Zustandsbescheibungen") das Spiel hat, und welche Methoden ("Aktionen") es geben soll. Überleg' dir, was man braucht, um das Spiel quasi vollständig(!) "fernsteuern" zu können:
Code:
class Go
{
    // Speichert die Felder (leer, schwarz, weiß)
    private int board[][] = ... 

    // Der Spieler, der gerade dran ist
    private int activePlayer = ...

    // Noch mehr Eigenschaften 
    ....

    // Welcher Spielstein auf Feld (x,y) liegt
    public int getColorAt(int x, int y) { ... }

    // Setzt den gegebenen Spielstein bei (x,y) 
    public void setColorAt(int x, int y, int stone) { ... }

    // Wer gewonnen hat
    public int getWinner() { ... }

    // Noch mehr Methoden
    ....
}
Das ist nur ur Vedeutlichung! Ich kenne Go nicht richtig, und WAS man genau braucht, um es vollständig zu beschreiben, muss DU dir überlegen!

Wenn das Spiel dann fertig ist, kann man es auf verschiedene Arten bedienen. Entweder, indem man es "programmatisch" laufen läßt:
Code:
Go go = new Go();
go.setColorAt(3,4, Go.BLACK);
go.setColorAt(1,2, Go.WHITE);
go.setColorAt(5,4, Go.BLACK);
if (go.gameOver()) printSomething();
oder indem man es an der Konsole spielen läßt
Code:
Go go = new Go();
int x;
int y;
while (!go.gameOver())
{
    x = benutzerEingabe("Schwarz: Gib x ein");
    y = benutzerEingabe("Schwarz: Gib y ein");
    go.setColorAt(x,y, Go.BLACK);

    x = benutzerEingabe("Weiss: Gib x ein");
    y = benutzerEingabe("Weiss: Gib y ein");
    go.setColorAt(x,y, Go.WHITE);
}
oder - was du willst - mit einem GUI
Code:
// Visualisiert das Spielfeld
class GoPanel extends JPanel
{
    private Go go = ...

    // Zeichne das Brett (oder füge entsprechend Buttons in das Panel ein, oder sonstwas)
    public paintComponent(Graphcis g)
    {
        for (alle Positionen) 
        {
            if (go.getColorAt(x,y) == Go.WHITE) maleWeiss();
            if (go.getColorAt(x,y) == Go.BLACK) maleSchwarz();
            if (go.getColorAt(x,y) == Go.EMPTY) maleNix();
        }
    }
}

// Kontrolliert den Spielablauf, bzw. empfängt Benutzereingaben und leitet sie an Go weiter
class GoController implements ActionListener oder MouseListener
{
    private Go go = ...

    public GoController()
    {
        ...
        goPanel.addActionOderMouseListener(this);
        ...
    }

    void spiele()
    {
        while (!go.gameOver())
        {
            erwarteBenutzerEingabe();
            goPanel.aktualisiereMitNeuemZustand();
        }

    }

    public void actionPerformed(ActionEvent e)
    {
        int x = findeRausWasGeklicktWurdeX();
        int y = findeRausWasGeklicktWurdeY();
        go.setColorAt(x,y, farbe);
    }

    
}
Nochmal: Insebsondere den GUI-Teil jetzt NICHT alles einfach rauskopieren, und versuchen, "mit Leben zu füllen". Das soll wirklich nur der Verdeutlichung des Konzepts dienen: Ein Spiel kann für sich selbst exisiteren, und gespielt werden. Das GUI dient dann nur dem Zweck
1. den aktuellen Spielzustand anzuzeigen (wie auch immer: Mit buttons, oder kleinen JPG-Bilchen von Steinen oder so)
2. Benutzereingaben zu empfangen, und an das "abstrakte" Spiel weiterzuleiten

Wenn du da dann noch ein bißchen geschickte Objektierientierung reinbringst, wird das ganze sogar recht flexibel...
Code:
abstract class Player
{
    private int color;
    abstract Move doMove(Go go);
}
class HumanPlayer extends Player { ... }
class ComputePlayer extends Player { ... }
class NetworkPlayer extends Player { ... }
So dass es ggf. sogar zwei menschliche Spieler geben kann, die auf dem gleichen GUI (oder verschiedenen GUIs, es ist ja nichts static ) spielen, oder übers Netzwerk, oder oder oder... Aber das nur als Anregung, damit du weißt, womit du dich die nächsten Monate beschäftigen könntest
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
javac funzt net gasti Java Basics - Anfänger-Themen 3 06.05.2008 18:59
Scrollbar funzt net :-/ KenshinX AWT, Swing, JavaFX & SWT 4 07.01.2006 19:08
CellRenderer funzt net T1M AWT, Swing, JavaFX & SWT 20 31.05.2005 07:56
TableLayout & .jar funzt das? joschika77 Allgemeine Java-Themen 6 05.12.2004 20:15
Methode funzt net Allgemeine Java-Themen 1 20.01.2004 17:14


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de