tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1984
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    auto3 auto3 ist offline Grünschnabel
    Registriert seit
    Apr 2010
    Beiträge
    1
    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.......
     

  2. #2
    Erik Erik ist offline Mitglied Gold
    Registriert seit
    Jul 2008
    Beiträge
    171
    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
     

  3. #3
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    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. :)

  4. #4
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    Die Fehlermeldung passt nicht zum code.
    Code :
    1
    
    MenuDame frame = new MakeFrame();
    Das müsste "Type mismatch: cannot convert from MenuDame.MakeFrame to MenuDame" gewesen sein.

    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

  1. Antworten: 4
    Letzter Beitrag: 23.09.08, 15:45
  2. Spiel Programmieren ?
    Von Sithlord2 im Forum Delphi, Kylix, Pascal
    Antworten: 6
    Letzter Beitrag: 18.03.08, 23:24
  3. Java-Spiel Tetris Programmieren
    Von minaynonie im Forum Java
    Antworten: 3
    Letzter Beitrag: 06.07.05, 20:36
  4. Help. Dame in Java
    Von aRR im Forum Java
    Antworten: 8
    Letzter Beitrag: 08.03.05, 16:03
  5. Java Spiel um programmieren
    Von Vedo im Forum Java
    Antworten: 2
    Letzter Beitrag: 13.01.05, 12:38