Frage von FelixAE7, 37

Was ist an diesem Java Code falsch (JFrame)?

Hier zu meinem Problem: Ich bekomme bei der Zeile "public static void fenster() extends JButton {" einen Syntaxerror und ich weiß leider nicht wieso könnt ihr mir helfen ?

Es geht um diesen Code:

import javax.swing.; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

public class frame extends JFrame implements ActionListener {

private JButton schliessen;
private JButton einstellungen;
private JButton info;
private JButton ende;


public static void main(String[] args) {
    einstellungen einst = new einstellungen();
    
    frame frame = new frame ("Menü");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(einst.höhefenster,einst.längefenster);
    
    frame.setLayout(null);
    frame.setVisible(einst.sichtbarkeitmenue);
    

}

public frame (String title){
    
    super(title);
    
    JLabel menuetext;
    menuetext = new JLabel ("Menue");
    menuetext.setBounds(162,0,150,50);
    menuetext.setFont(new Font("Arial", Font.BOLD, 24));
    add (menuetext);
    
    JLabel version;
    version = new JLabel ("Version 0.1");
    version.setBounds(315,330,100,50);
    version.setForeground(Color.GRAY);
    add (version);
    
    schliessen = new JButton ("Spiel starten");
    schliessen.setBounds(120, 60, 160, 40);
    schliessen.addActionListener(this);
    add(schliessen);
    
    einstellungen = new JButton ("Einstellungen");
    einstellungen.setBounds(120, 140, 160, 40);
    einstellungen.addActionListener(this);
    add(einstellungen);
    
    info = new JButton ("Informationen");
    info.setBounds(120, 220, 160, 40);
    info.addActionListener(this);
    add(info);
    
    ende = new JButton ("Beenden");
    ende.setBounds(120, 300, 160, 40);
    ende.addActionListener(this);
    ende.setBackground(Color.lightGray);
    add(ende);
}



public static void fenster() extends JButton {
    einstellungen einst = new einstellungen();
    einst.sichtbarkeitmenue = false;
    
    JFrame fenster = new JFrame();
    fenster.setDefaultCloseOperation(EXIT_ON_CLOSE);
    fenster.setSize(600, 400);
    fenster.setVisible(true);
    fenster.setLocation(100, 100);
    
    
    
    
    //--------------------------------------------------------------
    
    
    JButton hoch;
    JButton runter;
    JButton rechts;
    JButton links;
    
    hoch = new JButton ("UP");
    hoch.setBounds(40,40,40,40);
    add (hoch);
    
    //--------------------------------------------------------------
}

public static void einstellungen() {
    
    JFrame einstellungsframe = new JFrame ("Einstellungen");
    einstellungsframe.setDefaultCloseOperation(HIDE_ON_CLOSE);
    einstellungsframe.setSize(300,300);

    einstellungsframe.setLayout(null);
    einstellungsframe.setVisible(true);
}


public void actionPerformed(ActionEvent e) {
    
    if (e.getSource() == schliessen){
        fenster();
    }
    
    if (e.getSource() == info){
        Object[] options = {"OK"};
        
        JOptionPane.showOptionDialog(null,"Testprogramm, Anfang des Projektes: 11.02.2016", "Info", JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE,null
Expertenantwort
von KnusperPudding, Community-Experte für Java, 14

Nachdem ich den Code paste2.org Link gesehen habe. Folgendes:

Klassennamen schreibt man immer groß! - Das dient der Übersichtlichkeit, denn sonst wird der Code extrem unleserlich. (Variablen schreibt man entsprechend klein)

public class frame -->>  public class Frame

Und genau durch dieses groß/klein sind dir entsprechende Folgefehler passiert:

einstellungen einst = new einstellungen();
public static void einstellungen() {

Dein: "einstellungen" ist eine Methode und keine Klasse die man Instanziieren kann. (Zudem richtest du damit ein riesen Chaos an, nachdem dein Button ebenso "einstellungen" benennst.)

Ich gehe stark davon aus, dass aus "einstellung" eine Klasse hätte werden sollen.

Vermutlich genauso auch "fenster":

public static void fenster() {

Das ist bei dir ebenfalls eine Methode. was wohl eigentlich eine Klasse sein sollte. 

Falls du wirklich beabsichtigt hast, diese als Methoden zu nutzen:

macht es nur bei "fenster" sinn. allerdings wäre dann dein

add(hoch);

falsch. denn add() an sich ruft die Methode add der lokalen Instanz auf (die dir aber natürlich in einer statischen Methode nicht zur Verfügung steht. 

Antwort
von JupStrunk, 17

ich würde mal vermuten, weil es eine Funktion ist... :D
nur Klassen können "extenden", aber nicht Funktionen !!! ;)


Kommentar von FelixAE7 ,

Aber falls ich es wegnehme kriege ich ein Problem bei:

add (hoch);
Kommentar von JupStrunk ,

und wenn Du JButton in der Klassen-Deklaration implementierst, wo's auch hingehört ???

Antwort
von maximilianus7, 14

und wir sollen jetzt raten an welcher stelle der syntaxfehler auftritt und wie die fehlermeldung lautet?

hat der GF-editor den quelltext abgeschnitten oder gehört das abrupte ende zum ratespiel?

quelltexte bitte auf www.paste2.org posten

Kommentar von FelixAE7 ,

Sorry das war nicht gewollt!
Hier der komplette Code:

http://paste2.org/LNKyZJCm

Keine passende Antwort gefunden?

Fragen Sie die Community