[JAVA] JMenu in Gui einbinden

evilf

Cadet 4th Year
Registriert
Dez. 2010
Beiträge
103
Hallo liebe CB-Forum Mitglieder :)

Ich bin grade dabei, für ein Schulprojekt (Würfelspiel) in die GUI ein JMenu zu schreiben.
Hab mir schon viele Tuts zum Thema JMenu angeschaut, aber ich bekomme es einfach nicht auf die Reihe, dass JMenu richig einzubinden... :(
Habe bereits meine Infolehrerin gefragt, aber ihr "Lösungsvorschlag" funktioniert auch nicht...

Weitere Infos: Wir programmieren mit dem JAVA Editor (schmiert andauernd ab, aber in der Schule gibts es kein eclipse, netbeans, etc....)
Über das JMenu sollen später andere GUI's (Hilfefenster, etc geöffnet werden)

Fehler:
illegal start of expression
Z.188, Z. 191,...)


Hier das Programm:
Vielleicht findet ja einer von euch den Fehler & kann mir einen entscheidenen Tipp geben :)
Jedoch bitte keine Antworten in "fachchinesisch" formulieren, da ich in Sachen Java noch ein Newbie bin -.-
Code:
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 13.04.2011
  * @author
  */

public class GUI extends JFrame {
  // Anfang Attribute
  private JLabel jL_progname = new JLabel();
  private JLabel jL_sp1 = new JLabel();
  private JLabel jL_sp2 = new JLabel();
  private JTextField jT_sp1 = new JTextField();
  private JTextField jT_sp2 = new JTextField();
  private JTextField jT_sp1_punktzahl = new JTextField();
  private JTextField jT_sp2_punktzahl = new JTextField();
  private JTextField jT_ergebnis = new JTextField();
  private JButton jB_spielen = new JButton();
  private JButton jB_ende = new JButton();
  private JButton jB_sp1_behalten = new JButton();
  private JButton jB_sp2_behalten = new JButton();
  private JButton jB_sp1_again = new JButton();
  private JButton jB_sp2_again = new JButton();

  // Spiel wird initialisiert
  Spiel spiel = new Spiel();
  private boolean a = false;
  private boolean b = false;
  public String name1;
  public String name2;
  // Ende Attribute

  public GUI(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    int frameWidth = 800;
    int frameHeight = 475;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    jL_progname.setBounds(310, 22, 209, 48);
    jL_progname.setText("Black Jack");
    jL_progname.setFont(new Font("MS Sans Serif", Font.BOLD, 27));
    cp.add(jL_progname);
    
    jL_sp1.setBounds(80, 72, 53, 16);
    jL_sp1.setText("Spieler 1");
    jL_sp1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jL_sp1);
    
    jL_sp2.setBounds(544, 72, 53, 16);
    jL_sp2.setText("Spieler 2");
    jL_sp2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jL_sp2);
    
    jT_sp1.setBounds(80, 96, 161, 24);
    jT_sp1.setText("Name hier eingeben");
    cp.add(jT_sp1);
    
    jT_sp2.setBounds(544, 96, 161, 24);
    jT_sp2.setText("Name hier eingeben");
    cp.add(jT_sp2);
    
    jT_sp1_punktzahl.setBounds(80, 256, 161, 24);
    jT_sp1_punktzahl.setText("Spieler 1 Punktzahl");
    cp.add(jT_sp1_punktzahl);
    
    jT_sp2_punktzahl.setBounds(544, 256, 161, 24);
    jT_sp2_punktzahl.setText("Spieler 2 Punktzahl");
    cp.add(jT_sp2_punktzahl);
    
    jT_ergebnis.setBounds(80, 328, 625, 24);
    jT_ergebnis.setText("Gewinner");
    cp.add(jT_ergebnis);
    
    jB_spielen.setBounds(271, 95, 241, 80);
    jB_spielen.setText("Spielen");
    jB_spielen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jB_spielen_ActionPerformed(evt);
      }
    });
    cp.add(jB_spielen);
    
    jB_ende.setBounds(271, 200, 241, 80);
    jB_ende.setText("Gewinnermittlung");
    jB_ende.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jB_ende_ActionPerformed(evt);
      }
    });
    cp.add(jB_ende);
    
    jB_sp1_behalten.setBounds(80, 144, 161, 33);
    jB_sp1_behalten.setText("Behalten");
    jB_sp1_behalten.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jB_sp1_behalten_ActionPerformed(evt);
      }
    });
    cp.add(jB_sp1_behalten);
    
    jB_sp2_behalten.setBounds(544, 144, 161, 33);
    jB_sp2_behalten.setText("Behalten");
    jB_sp2_behalten.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jB_sp2_behalten_ActionPerformed(evt);
      }
    });
    cp.add(jB_sp2_behalten);
    
    jB_sp1_again.setBounds(80, 200, 161, 33);
    jB_sp1_again.setText("Erneut würfeln");
    jB_sp1_again.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jB_sp1_again_ActionPerformed(evt);
      }
    });
    cp.add(jB_sp1_again);
    
    jB_sp2_again.setBounds(544, 200, 161, 33);
    jB_sp2_again.setText("Erneut würfeln");
    jB_sp2_again.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jB_sp2_again_ActionPerformed(evt);
      }
    });
    cp.add(jB_sp2_again);
    
    setResizable(false);
    setVisible(true);
  }
  
  // Start des JMenu
  public void JMenuBarBeispiel() { 
     private JFrame applikation = new JFrame("JMenuBar Beispiel");
     container = applikation.getContentPane();

     // Menüleiste erzeugen
     private JMenuBar menueLeiste = new JMenuBar();

     // Menüelemente erzeugen
     private JMenu optionen = new JMenu("Optionen");
     private JMenu hilfe = new JMenu("Hilfe");

     // Untermenüelemente erzeugen
     private JMenuItem mehrspielermodus = new JMenuItem("Mehrspieler");
     mehrspielermodus.addActionListener(this);
     private JMenuItem einzelspieler = new JMenuItem("Einzelspieler");
     einzelspieler.addActionListener(this);
     private JMenuItem faq = new JMenuItem("F.A.Q.");
     faq.addActionListener(this);
     private JMenuItem about = new JMenuItem("Info");
     about.addActionListener(this);

     // Menüelemente hinzufügen
     menueLeiste.add(optionen);
     menueLeiste.add(hilfe);

     // Untermenüelemente hinzufügen
     optionen.add(mehrspielermodus);
     optionen.add(einzelspieler);
     hilfe.add(faq);
     hilfe.add(about);

     // Textfeld erzeugen
     //textarea = new JTextArea();

     applikation.add(menueLeiste, BorderLayout.NORTH);
     //applikation.add(new JScrollPane(textarea), BorderLayout.CENTER);

     //applikation.setSize(400, 300);
     //applikation.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     applikation.setVisible(true);
  }

  // Anfang Methoden
  public void jB_spielen_ActionPerformed(ActionEvent evt) {
    jB_sp1_again.setEnabled(true);
    jB_sp2_again.setEnabled(true);
    jB_sp1_behalten.setEnabled(true);
    jB_sp2_behalten.setEnabled(true);
    jB_spielen.setEnabled(false);
    jB_ende.setEnabled(false);

    // Spielernamen auslesen
    String name1 = jT_sp1.getText();
    String name2 = jT_sp2.getText();


    //Programmstart
    jT_ergebnis.setText(spiel.spielen());
    
    jT_sp1_punktzahl.setText(""+ spiel.wertspieler1);
    if (spiel.wertspieler1 > 21)
    {
       jT_sp1_punktzahl.setBackground(Color.RED);
    }
    else
    {
       jT_sp1_punktzahl.setBackground(Color.GREEN);
    }
    
    jT_sp2_punktzahl.setText(""+ spiel.wertspieler2);
    if (spiel.wertspieler2 > 21)
    {
       jT_sp2_punktzahl.setBackground(Color.RED);
    }
    else
    {
       jT_sp2_punktzahl.setBackground(Color.GREEN);
    }
  }

  public void jB_sp1_behalten_ActionPerformed(ActionEvent evt) {
    jB_sp1_again.setEnabled(false);
    jB_sp1_behalten.setEnabled(false);


    // Gewinnerermittlung erst enabled, wenn beide Spieler Behalten drücken.
    a = true;

    if (a && b)
    {
       jB_ende.setEnabled(true);
    }

  }

  public void jB_sp2_behalten_ActionPerformed(ActionEvent evt) {
    jB_sp2_again.setEnabled(false);
    jB_sp2_behalten.setEnabled(false);
    
    // Gewinnerermittlung erst enabled, wenn beide Spieler Behalten drücken.
    b = true;

    if (b && a )
    {
       jB_ende.setEnabled(true);
    }

  }

  public void jB_sp1_again_ActionPerformed(ActionEvent evt) {
    // Programmstart
    jT_ergebnis.setText(spiel.sp1_spielen_again());
    
    if (spiel.wertspieler1_again > 21)
    {
       jT_sp1_punktzahl.setBackground(Color.RED);
    }
    else
    {
       jT_sp1_punktzahl.setBackground(Color.GREEN);
    }

    jT_sp1_punktzahl.setText(""+ spiel.wertspieler1_again);
  }

  public void jB_sp2_again_ActionPerformed(ActionEvent evt) {
    //Programmstart
    jT_ergebnis.setText(spiel.sp2_spielen_again());

    if (spiel.wertspieler2_again > 21)
    {
       jT_sp2_punktzahl.setBackground(Color.RED);
    }
    else
    {
       jT_sp2_punktzahl.setBackground(Color.GREEN);
    }

    jT_sp2_punktzahl.setText(""+ spiel.wertspieler2_again);
  }
  
  public void jB_ende_ActionPerformed(ActionEvent evt) {
    jT_ergebnis.setText(spiel.gewinner());
    jB_spielen.setEnabled(true);
    
    a = false;
    b = false;
  }


// Testweise Funktionen für die JMenuBar  
public void actionPerformed(ActionEvent object) {
    if (object.getSource() == mehrspielermodus)
    {
       System.out.println("mehrspielermodus wurde angeklickt");
    }
    if (object.getSource() == einzelspieler)
    {
       System.out.println("einzelspieler wurde angeklickt");
    }
    if (object.getSource() == faq)
    {
       System.out.println("faq wurde angeklickt");
    }
    if (object.getSource() == about)
    {
       System.out.println("info wurde angeklickt");
    }
  }
  // Ende Methoden

  public static void main(String[] args) {
    new GUI("Black Jack");
  }
}
Vielen Dank für eure Hilfe :)

P.S.: Wer Rechtschreibfehler findet, darf sie behalten ;)
 
Zuletzt bearbeitet:
Bin es jetzt nur so kurz durchgegangen und erstmal folgende frage:

applikation.add(menueLeiste, BorderLayout.NORTH);

warum erzeugst du ein neues frame? soweit ich das jetzt auf die schnelle sehe, erzeugst du ein neues frame und versuchst diesem die menuebar hinzuzufügen. allerdings hast du doch bereits ein frame, da deine klasse (gui) ja bereits jframe erweitert (extends).

ich denke du brauchst diese Zeile hier:

this.setJMenuBar(menueLeiste);

solltest du die menuebar wirklich in das frame "applikation" einsetzen wollen, dann halt:

applikation.setJMenuBar(menueLeiste);
 
Sry, habe vergessen, den Code auszukommentieren.
Natürlich soll in der GUI keine neuer Frame erstellt werden...
Das mit dem this.... werde ich mal ausprobiern.
Danke :)

EDIT: Hat leider auch nichts gebracht, falls ich das richtig implementiert habe :)
Kannst du vllt deine Lösung mal oben in den Code reinschreiben? :)
 
Zuletzt bearbeitet:
Und sag deiner Lehrerin mal, dass sie, wenn ihr schon programmiert auch eclipse oder netbeans verwenden solltet. Das ist mittlerweile echt standart. es ist nur von vorteil wenn man die ganzen funktionalitäten und vorteile so einer ide mal kennenlernt.

es kann doch nicht so schwer sein auf den rechnern eclipse zu installieren!?
 
Ja das haben wir auch gesagt (ich bin sein Projektpartner) aber wie wir unsere schule kennen dauert das ein paar jährchen und das hilft uns jetzt auch leider wenig weiter... :/
 
Hat es denn schon funktioniert? oder könnt ihr das erst morgen nachprüfen?
 
Shagg schrieb:
Und sag deiner Lehrerin mal, dass sie, wenn ihr schon programmiert auch eclipse oder netbeans verwenden solltet. Das ist mittlerweile echt standart. es ist nur von vorteil wenn man die ganzen funktionalitäten und vorteile so einer ide mal kennenlernt.

es kann doch nicht so schwer sein auf den rechnern eclipse zu installieren!?

Darf ich dich dran erinnern, dass es sowohl eclipse als auch Java als portable gibt ;D Du müsstest nicht mal was installieren (So habs ich gemacht und es fuktioniert wunderbar :))
 
Hey Shagg,

hab mal probiert mit deinem Tipp das zu implementieren, aber geht auch nicht...

Kannst du das vllt mal machen & dabei diesen JFrame (applikation oder so) rausmachen?
Weil der JFrame soll ja der von der GUI sein, aber ich bekomm es nicht auf die Reihe, dass ohne Compilerfehler rauszulöschen -.-
 
hmm, könnte ich evtl machen. hab allerdings selbst auch übungen zu machen. ich schau mal ob ich heute abend noch bock habe. gibt es noch mehr code als das in deinem quote?

hab den code gerade nochmal angeschaut. da sind doch noch eine grobe fehler mehr drinn. evtl könntet ihr mir mal den gesamten projektordner per mail schicken.
 
Zuletzt bearbeitet:
Das wäre super, wenn du da einen Blick drüber werfen könntest, denn wir haben auch keine infostunde mehr vor der abgabe und die lehrerin ist erstmal ausser haus-.-.
Die .rar deitei ist im anhang viel glück damit. Wir haben bisher echt wenig programmiert im unterricht und es nervt ein bisschen dass wir nicht viel schaffen und die ganze sache mit dem editor-.-
 

Anhänge

  • AllesNeu.rar
    60,7 KB · Aufrufe: 250
Hi nochmal!

Also ich hab euch jetzt mal die JMenuBar eingebaut. Diese reagiert auch darauf, wenn si angeklickt wird. Wie das funktioniert, könnt ihr euch ganz unten in der Klasse angucken!

Ich hab jetzt nur sachen in der GUI-Klasse geändert. Eure MenuBarBeispiel Klasse könnt ihr wegschmeissen. Übrigens haben irgendwie alle eure Klassen eine main Methode, was eher schlecht ist.
Sagt bescheid wenn ihr es getestet habt, bei mir läuft die gui klasse nun aber ;)
 

Anhänge

  • src.rar
    60,9 KB · Aufrufe: 269
Zuletzt bearbeitet:
Vielen vielen Dank Shagg :DDDD
Endlich gehts :DDD

Ich habs 3 Tage erfolglos probiert & war schon kurz davor, meine Festplatte zu formatieren & wieder einen Rechenschieber zu benutzen :DDDDD

Einen Herzlichen Dank von unserer Seite auch dafür, dass du dir die Zeit genommen hast, dass grade umzuschreiben :D

Danke :D
 
Kein Ding. Beim nächstenmal die Sache evtl. etwas strukturierter angehen. Vorher mal festlegen welche Klassen man braucht und welche Funktionen die beinhalten müssen. Dann ist es für alle anderen auch einfacher das ganze nachzuvollziehen :D

Viel Spaß noch bei der restlichen Implementierung!
 
Danke auch von mir noch mal :) klasse!
 
Jo, das nächste Projekt wird mit Eclipse / netBeans gemacht :D
(Wohl eher Eclipse, da netBeans keine UML Funktion hat(hab ich zumindest nicht gefunden^^))
Dann sieht das auch mit der Programmstruktur viel besser aus :D
 
Zurück
Oben