Hallo , ich habe einige Fragen zum Thema Vererbung von der Swingkomponete JPanel.
Ich Arbeite gerade an einem kleinen Spiel was mir ein Mitschüler
gezeigt hat und das mir relativ leicht zu digitalisieren schien.
(so ist das mit dem Denken -.-)^^
Nach dem ich einige Experimente mit Grafik (draw,drawline, etc) und mich via
Internet über Swing,Awt informiert habe legte ich los.
Ein momentanes Ergebnis liegt im Anhang. Es ist ein Jar^^. Das Spielfeld sieht wie folgt aus.
nun wie ihr drehen könnt ist es ein eigens Fenster, ich hätte aber gern ein JPanel in dem
genau das zu sehen ist.
Der Code des Fensters sieht so aus:
//MousLis
Sorry das der Code noch unsauber ist aber stecke halt noch in der Entwicklung^^
So soviel zum Hintergrund nun aber mein Konkretes Problem:
Der Quellcode ist ja noch nackt, ich wollte nun einfach drauf los überschreiben
[Java]public void paint(Grafics g) {DataObj.DrawInterface.drawMpa(g);}[Java]
nun so wie ich mit das gedacht hatte ging es dann doch nicht-.-
Also wie muss ich die paint Methode oder paintComponet Methode überschreiben das sie
zwar das eigentlich JPanel zeichnen sondern auch das Spielfeld integriert.
Danke im voraus^^
Sorry überings für den Namen des Programms(Monkey)(Mir fiel nichts besseres ein)
und die Schreibfehler in dem Programm^^
http://www.file-upload.net/download-341326/Optionen.jar.html(26.99 Kbyte)
http://www.file-upload.net/download-341331/MonkeyGameSurce.rar.html (73.92 Kbyte)
Ich Arbeite gerade an einem kleinen Spiel was mir ein Mitschüler
gezeigt hat und das mir relativ leicht zu digitalisieren schien.
(so ist das mit dem Denken -.-)^^
Nach dem ich einige Experimente mit Grafik (draw,drawline, etc) und mich via
Internet über Swing,Awt informiert habe legte ich los.
Ein momentanes Ergebnis liegt im Anhang. Es ist ein Jar^^. Das Spielfeld sieht wie folgt aus.
nun wie ihr drehen könnt ist es ein eigens Fenster, ich hätte aber gern ein JPanel in dem
genau das zu sehen ist.
Der Code des Fensters sieht so aus:
Code:
/* GrafikBeispiel.java */
import java.awt.*;
public class GrafikBeispiel
extends Frame implements Runnable
{
private static final long serialVersionUID = -6888542131013683779L;
public static void main(String[] args)
{
GrafikBeispiel wnd = new GrafikBeispiel("Spiel_",true);
System.out.println(wnd.getState());
wnd.startAnimation();
}
public GrafikBeispiel(String name,Boolean StandAlone)
{
super(name);
if (StandAlone){
DataObj.create();
DataObj.PlayerData[0].setColor(Color.blue);
DataObj.PlayerData[1].setColor(Color.red);
}
addWindowListener(new WindowClosingAdapter(false));
addMouseListener(new myMouseListener());
addKeyListener(new myKeyLis());
setBackground(Color.WHITE);
setSize(DataObj.whide*20+100,DataObj.hight*20+100);
setVisible(true);
}
public void run(){
while (true) {
//repaint();
try {
Thread.sleep(800);
} catch (InterruptedException e) {
//nichts
}
}
}
public void startAnimation()
{
Thread th = new Thread(this);
th.start();
}
public void paint(Graphics g)
{
DataObj.DrawInterface.drawMpa(g);
}
}
Code:
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.Color;
public class myKeyLis extends KeyAdapter {
public void keyPressed(KeyEvent e){
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
if (DataObj.ActivePlayer == 0){
DataObj.ActivePlayer = 1;
} else {
DataObj.ActivePlayer = 0;
}
}
if (e.getKeyCode() == KeyEvent.VK_ALT)
e.getComponent().repaint();
if (e.getKeyCode() == KeyEvent.VK_CONTROL)
DataObj.PlayerData[DataObj.ActivePlayer].setColor(Color.red.darker());
}
}
//MousLis
Code:
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class myMouseListener extends MouseAdapter {
private int pixlengx = DataObj.x0+20*DataObj.whide;
private int pixlengy = DataObj.x0+20*DataObj.hight;
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
//System.out.println("Ac x"+x+"y"+y);
// definire reaktionsbereich
if ((x > DataObj.x0 && x < pixlengx) && (y > DataObj.x0 && y < pixlengy)){
int[] tmp = erkenneFeld(x,y);
Spieler tmp2 = DataObj.PlayerData[DataObj.ActivePlayer];
//System.out.println("Ac x"+tmp[0]+"y"+tmp[1]);
if (tmp2.Reg.isPosibleMove(tmp[0], tmp[1])){
DataObj.Gamefield.setFeldUsed(tmp[0], tmp[1],tmp2);e.getComponent().repaint();
}
}
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
//nix
}
public void mouseExited(MouseEvent e) {
//nix
}
public void mouseReleased(MouseEvent e) {
//nix
}
private int[] erkenneFeld(int x, int y) {
int[] result = new int[2];
for (int i = DataObj.x0;i <= pixlengx;i+=20){
if (x <= i){
result[1]=(int)(i-DataObj.x0)/20-1;
break;
}
}
for (int i = DataObj.x0;i <= pixlengy;i+=20){
if (y <= i){
result[0]=(int)(i-DataObj.x0)/20-1;
break;
}
}
return result;
}
}
Code:
import java.io.*;
public class DataObj implements Serializable {
private static final long serialVersionUID = 6880462629655371773L;
public static DrawGame_Modifine DrawInterface;
public static Spieler PlayerData[];
public static Spielfeld Gamefield;
public static int whide;
public static int hight;
public static int ActivePlayer;
public static final int x0 = 50;
public DataObj (){
if (PlayerData == null || DataObj.Gamefield == null){
DataObj.DrawInterface = new DrawGame_Modifine();
PlayerData = new Spieler[2];
DataObj.Gamefield= new Spielfeld(DataObj.whide,DataObj.hight);
DataObj.DrawInterface.setWhide(whide);
DataObj.DrawInterface.setX0(50);
}
DataObj.whide = 20;
DataObj.hight = 20;
DataObj.ActivePlayer = 0;
}
public DataObj (int hight,int whide,int playeranz){
DataObj.DrawInterface = new DrawGame_Modifine();
PlayerData = new Spieler[playeranz];
DataObj.Gamefield= new Spielfeld(hight,whide);
DataObj.whide = whide;
DataObj.hight = hight;
DataObj.ActivePlayer = 0;
DataObj.DrawInterface.setWhide(whide);
DataObj.DrawInterface.setX0(50);
}
public static void setDrawInterface(int x0) {
DataObj.DrawInterface.setX0(x0);
DataObj.DrawInterface.setWhide(DataObj.whide);
}
public static void setPlayerData(int index,Spieler wert) {
PlayerData[index] = wert;
}
public static void setWhide(int wert) {
DataObj.whide = wert;
}
public static void setActivePlayer(int wert) {
DataObj.ActivePlayer = wert;
}
public static void setGamefield(int breite,int hoehe) {
DataObj.whide = breite;
DataObj.hight = hoehe;
DataObj.Gamefield = new Spielfeld(breite,hoehe);
}
public static void create(){
PlayerData = new Spieler[2];
PlayerData[0] = new Spieler();
PlayerData[1] = new Spieler();
DataObj.whide = 40;
DataObj.hight = 20;
DataObj.Gamefield= new Spielfeld(DataObj.whide,DataObj.hight);
DataObj.DrawInterface = new DrawGame_Modifine();
DataObj.ActivePlayer = 0;
DataObj.DrawInterface.setWhide(20);
DataObj.DrawInterface.setX0(50);
}
public static void free() {
PlayerData = new Spieler[2];
PlayerData[0] = null;
PlayerData[1] = null;
DataObj.whide = 0;
DataObj.hight = 0;
DataObj.Gamefield= null;
DataObj.DrawInterface = null;
DataObj.ActivePlayer = -1;
}
}
Sorry das der Code noch unsauber ist aber stecke halt noch in der Entwicklung^^
So soviel zum Hintergrund nun aber mein Konkretes Problem:
Code:
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
/**
* @author Notebook
*/
public class jMonkeyPanel extends JPanel implements MouseMotionListener,
MouseListener, KeyListener {
private static final long serialVersionUID = 7118470082644720064L;
private int pixlengx = DataObj.x0+20*DataObj.whide;
private int pixlengy = DataObj.x0+20*DataObj.hight;
public jMonkeyPanel() {
DataObj.create();
DataObj.PlayerData[0].setColor(Color.blue);
DataObj.PlayerData[1].setColor(Color.red);
DataObj.DrawInterface.drawMpaPanel(super.getGraphics());
}
/* (Kein Javadoc)
* @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
*/
public void mouseDragged(MouseEvent e) {
// TODO Automatisch erstellter Methoden-Stub
}
/* (Kein Javadoc)
* @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
*/
public void mouseMoved(MouseEvent e) {
// TODO Automatisch erstellter Methoden-Stub
}
/* (Kein Javadoc)
* @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
*/
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
//System.out.println("Ac x"+x+"y"+y);
// definire reaktionsbereich
if ((x > DataObj.x0 && x < pixlengx) && (y > DataObj.x0 && y < pixlengy)){
int[] tmp = erkenneFeld(x,y);
Spieler tmp2 = DataObj.PlayerData[DataObj.ActivePlayer];
//System.out.println("Ac x"+tmp[0]+"y"+tmp[1]);
if (tmp2.Reg.isPosibleMove(tmp[0], tmp[1])){
DataObj.Gamefield.setFeldUsed(tmp[0], tmp[1],tmp2);e.getComponent().repaint();
}
}
}
/* (Kein Javadoc)
* @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
*/
public void mousePressed(MouseEvent e) {
this.mouseClicked(e);
}
/* (Kein Javadoc)
* @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
*/
public void keyPressed(KeyEvent e) {
// TODO Automatisch erstellter Methoden-Stub
}
/* (Kein Javadoc)
* @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
*/
public void keyReleased(KeyEvent e) {
}
/* (Kein Javadoc)
* @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
*/
public void keyTyped(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
if (DataObj.ActivePlayer == 0){
DataObj.ActivePlayer = 1;
} else {
DataObj.ActivePlayer = 0;
}
}
if (e.getKeyCode() == KeyEvent.VK_ALT)
e.getComponent().repaint();
if (e.getKeyCode() == KeyEvent.VK_CONTROL)
DataObj.PlayerData[DataObj.ActivePlayer].setColor(Color.red.darker());
}
private int[] erkenneFeld(int x, int y) {
int[] result = new int[2];
for (int i = DataObj.x0;i <= pixlengx;i+=20){
if (x <= i){
result[1]=(int)(i-DataObj.x0)/20-1;
break;
}
}
for (int i = DataObj.x0;i <= pixlengy;i+=20){
if (y <= i){
result[0]=(int)(i-DataObj.x0)/20-1;
break;
}
}
return result;
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
Der Quellcode ist ja noch nackt, ich wollte nun einfach drauf los überschreiben
[Java]public void paint(Grafics g) {DataObj.DrawInterface.drawMpa(g);}[Java]
nun so wie ich mit das gedacht hatte ging es dann doch nicht-.-
Also wie muss ich die paint Methode oder paintComponet Methode überschreiben das sie
zwar das eigentlich JPanel zeichnen sondern auch das Spielfeld integriert.
Danke im voraus^^
Sorry überings für den Namen des Programms(Monkey)(Mir fiel nichts besseres ein)
und die Schreibfehler in dem Programm^^
http://www.file-upload.net/download-341326/Optionen.jar.html(26.99 Kbyte)
http://www.file-upload.net/download-341331/MonkeyGameSurce.rar.html (73.92 Kbyte)