ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
1984
1984
EMPFEHLEN
-
Hallo alle zusammen.
Ich habe einige Probleme mit meinem Quellcode da kommt immer eine Fehlermeldung die für mich unklar ist.
Nun möchte ich hier euch um Hilfe bitten. Ich muss von der Schule aus ein Dame Spiel programmieren, das von der menu das Spiel starten kann und
das ich wie z.B. von Menü aus noch beenden kan usw.
Fehlermeldung:
Compiliere C:\Dokumente und Einstellungen\manwel\Eigene Dateien\- Programming -\-- Dame --\MenuDame.java mit Java-Compiler
MenuDame.java:157:22: non-static variable this cannot be referenced from a static context
MenuDame frame = new MakeFrame();
^
1 error
Meine Quellcode:
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MenuDame {
public class MakeFrame extends Frame{
public MakeFrame(){
setTitle("Dame Spiel");
addWindowListener(new TestWindowListener());
add(new DrawingPanel());
setSize(450,500);
setVisible(true);
}
public class DrawingPanel extends Panel{
public void paint(Graphics g){
for(int i=1; i<=8; i++){ // i entspricht y-Koordinate
for(int j=1; j<=8; j++){ // j entspricht x-Koordinate
// erste zeile beginnend mit weiß
if(i%2==1 & j%2==1){
g.setColor(Color.GRAY);
g.drawRect(40+(j-1)*40, 40+(i-1)*40, 40, 40);
}
if(i%2==1 & j%2==0){
g.fillRect(40+(j-1)*40, 40+(i-1)*40, 40, 40);
}
// zweite zeile beginnend mit schwarz
if(i%2==0 & j%2==1){
g.fillRect(40+(j-1)*40, 40+(i-1)*40, 40, 40);
}
if(i%2==0 & j%2==0){
g.drawRect(40+(j-1)*40, 40+(i-1)*40, 40, 40);
}
}
}
// Fiegur zeichnen von oben
for(int i=1; i<=3; i++){
for(int j=1; j<=8; j++){
// erste zeile beginnend mit weiß
if(i%2==1 & j%2==0){
g.setColor(Color.WHITE);
g.drawOval(j*40, 40+(i-1)*40, 40, 40);
}
// zweite zeile beginnend mit schwarz
if(i%2==0 & j%2==1){
g.drawOval(40+(j-1)*40, 40+(i-1)*40, 40, 40);
}
}
}
// Fiegur zeichnen von unten
for(int i=8; i>=6; i--){
for(int j=8; j>=1; j--){
// erste zeile beginnend mit weiß
if(i%2==0 & j%2==1){
g.setColor(Color.BLACK);
g.drawOval((j*40), i*40, 40, 40);
}
// zweite zeile beginnend mit schwarz
if(i%2==1 & j%2==0){
g.drawOval(j*40, i*40, 40, 40);
}
}
}
}
}
}
public MenuDame () {
Frame f = new Frame ("Damen Spiel");
f.addWindowListener(new TestWindowListener());
f.setMenuBar(this.getMenubar ());
f.setSize(450,500);
f.setVisible(true);
}
protected MenuBar getMenubar(){
// Menüleiste anlegen
MenuBar menueLeiste = new MenuBar();
// Ein Menü anlegen ------------------------------------------------------
Menu datei = new Menu("Datei");
Menu bearb = new Menu("Bearbeiten");
Menu extra = new Menu ("Extras");
Menu help = new Menu("Hilfe");
Menu stuffe = new Menu("Stuffe");
Menu einst = new Menu("Einstellungen...");
// Einen Menüeintrag anlegen
MenuItem oeffnen = new MenuItem("Neu");
// Den Eintrag dem Menü hinzufügen
datei.add (oeffnen);
datei.add("leeres Brett");
datei.addSeparator();
datei.add("Beenden");
bearb.add("Rückgängig");
bearb.add("Wiederrufen");
help.add("Version");
help.add("Info");
//...das Menü dem Extramenü als Untermenü hinzufügen
extra.add(stuffe);
extra.add(einst);
// Das Untermenü mit Einträgen füllen
stuffe.add("Anfaenger");
stuffe.add("Fortgeschritten");
stuffe.addSeparator();
stuffe.add("Profi");
einst.add("Figur");
einst.add("Farbe");
// Das Extramenü der Leiste hinzufügen
menueLeiste.add(datei);
menueLeiste.add(bearb);
menueLeiste.add(extra);
menueLeiste.add(help);
return menueLeiste;
}
public class TestWindowListener extends WindowAdapter{ // windowsfenster min, max oder schießen
public void windowClosing(WindowEvent e){
e.getWindow().dispose();
System.exit(0);
}
}
public static void main (String[] args) {
MenuDame menusample = new MenuDame();
MenuDame frame = new MakeFrame();
}
}
Für eine schnelle Hilfe wäre ich sehr dankbar.
Mit freundlichen Grüßen.......
-
Hallo,
Erstmal Wilkommen im Forum!
Allerdings solltest du deinen Code in [Code][ /Code] oder besser in [Java][ /Java]- Tags fassen damit man ihn auch noch lesen kann.
Gruß
Erik
-
10.04.10 19:19 #3
Auf eine Instanzvariable kann von einer Klassenmethode nicht zugegriffen werden. Die Fehlermeldung sollte doch eindeutig sein.
Mein kleiner webstart Projektplaner:
http://178.77.101.236/ppws/
Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.
Danke. :)
-
23.04.10 16:00 #4
Die Fehlermeldung passt nicht zum code.
Das müsste "Type mismatch: cannot convert from MenuDame.MakeFrame to MenuDame" gewesen sein.Code :1
MenuDame frame = new MakeFrame();
kompilierbare Version zum copypasten:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.Panel; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MenuDame { class MakeFrame extends Frame { public MakeFrame() { setTitle("Dame Spiel"); addWindowListener(new TestWindowListener()); add(new DrawingPanel()); setSize(450, 500); setVisible(true); } class DrawingPanel extends Panel { public void paint(Graphics g) { for (int i = 1; i <= 8; i++) { // i entspricht y-Koordinate for (int j = 1; j <= 8; j++) { // j entspricht x-Koordinate // erste zeile beginnend mit weiß if (i % 2 == 1 & j % 2 == 1) { g.setColor(Color.GRAY); g.drawRect(40 + (j - 1) * 40, 40 + (i - 1) * 40, 40, 40); } if (i % 2 == 1 & j % 2 == 0) { g.fillRect(40 + (j - 1) * 40, 40 + (i - 1) * 40, 40, 40); } // zweite zeile beginnend mit schwarz if (i % 2 == 0 & j % 2 == 1) { g.fillRect(40 + (j - 1) * 40, 40 + (i - 1) * 40, 40, 40); } if (i % 2 == 0 & j % 2 == 0) { g.drawRect(40 + (j - 1) * 40, 40 + (i - 1) * 40, 40, 40); } } } // Fiegur zeichnen von oben for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 8; j++) { // erste zeile beginnend mit weiß if (i % 2 == 1 & j % 2 == 0) { g.setColor(Color.WHITE); g.drawOval(j * 40, 40 + (i - 1) * 40, 40, 40); } // zweite zeile beginnend mit schwarz if (i % 2 == 0 & j % 2 == 1) { g.drawOval(40 + (j - 1) * 40, 40 + (i - 1) * 40, 40, 40); } } } // Fiegur zeichnen von unten for (int i = 8; i >= 6; i--) { for (int j = 8; j >= 1; j--) { // erste zeile beginnend mit weiß if (i % 2 == 0 & j % 2 == 1) { g.setColor(Color.BLACK); g.drawOval((j * 40), i * 40, 40, 40); } // zweite zeile beginnend mit schwarz if (i % 2 == 1 & j % 2 == 0) { g.drawOval(j * 40, i * 40, 40, 40); } } } } } } public MenuDame() { Frame f = new Frame("Damen Spiel"); f.addWindowListener(new TestWindowListener()); f.setMenuBar(this.getMenubar()); f.setSize(450, 500); f.setVisible(true); } protected MenuBar getMenubar() { // Menüleiste anlegen MenuBar menueLeiste = new MenuBar(); // Ein Menü anlegen // ------------------------------------------------------ Menu datei = new Menu("Datei"); Menu bearb = new Menu("Bearbeiten"); Menu extra = new Menu("Extras"); Menu help = new Menu("Hilfe"); Menu stuffe = new Menu("Stuffe"); Menu einst = new Menu("Einstellungen..."); // Einen Menüeintrag anlegen MenuItem oeffnen = new MenuItem("Neu"); // Den Eintrag dem Menü hinzufügen datei.add(oeffnen); datei.add("leeres Brett"); datei.addSeparator(); datei.add("Beenden"); bearb.add("Rückgängig"); bearb.add("Wiederrufen"); help.add("Version"); help.add("Info"); // ...das Menü dem Extramenü als Untermenü hinzufügen extra.add(stuffe); extra.add(einst); // Das Untermenü mit Einträgen füllen stuffe.add("Anfaenger"); stuffe.add("Fortgeschritten"); stuffe.addSeparator(); stuffe.add("Profi"); einst.add("Figur"); einst.add("Farbe"); // Das Extramenü der Leiste hinzufügen menueLeiste.add(datei); menueLeiste.add(bearb); menueLeiste.add(extra); menueLeiste.add(help); return menueLeiste; } class TestWindowListener extends WindowAdapter { // windowsfenster // min, max oder // schießen public void windowClosing(WindowEvent e) { e.getWindow().dispose(); System.exit(0); } } public static void main(String[] args) { MenuDame menusample = new MenuDame(); MakeFrame frame = menusample.new MakeFrame(); } }
Zwei Anwendungsfenster sind unelegant. Wenn doch, am besten verschieden positionieren (setLocation()).
Irgendwie kann man noch nicht spielen. Da muss wohl noch weiterprogrammiert werden.
Klassen inline zu definieren ist eine Strukturierungs- und Zugriffskontrollmassnahme. Alles ungefragt in eine Klasse zu packen macht diese unhandlich.Denken gefärdet die Gewohnheit
Ähnliche Themen
-
Spiel in Java --> kann nicht gut programmieren
Von lin_ux im Forum JavaAntworten: 4Letzter Beitrag: 23.09.08, 15:45 -
Spiel Programmieren ?
Von Sithlord2 im Forum Delphi, Kylix, PascalAntworten: 6Letzter Beitrag: 18.03.08, 23:24 -
Java-Spiel Tetris Programmieren
Von minaynonie im Forum JavaAntworten: 3Letzter Beitrag: 06.07.05, 20:36 -
Help. Dame in Java
Von aRR im Forum JavaAntworten: 8Letzter Beitrag: 08.03.05, 16:03 -
Java Spiel um programmieren
Von Vedo im Forum JavaAntworten: 2Letzter Beitrag: 13.01.05, 12:38





Zitieren
Login





