Ordnen des Programms

Status
Nicht offen für weitere Antworten.
nachdem ich mein letztes programm aufgegeben habe, weil ich einfach die Übersicht verloren habe (einfach alles in main() gequetscht), versuche ich jetzt erneut, aber diesmal mit Struktur. Das ist aber gar nicht so einfach, weil ich immer nur tutorials gelesen habe, in denen nie langer quelltext sondern immer nur codeschnipsel vorkamen. Eine Erklährung wie man nun mit langem Quelltext hantiert gab es dementsprechend nicht. Mein (erstes) Problem:

Java:
package projekt2;
import javax.swing.*;

public class Main {

public static menu(){
    JMenuBar menubar = new JMenuBar();
    JMenu menu = new JMenu("Hilfe");
    JMenuItem about = new JMenuItem("Über...");
    
    menubar.add(menu);
    menu.add(about);
    return menubar;
}

    public static void showwindow(){
JFrame frame = new JFrame("Hallo");
frame.setSize(200, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.add(panel);
frame.setJMenuBar(menu());
    }


public static void main(String[] args) {
       showwindow();
}

Ich versuche die methode menu in die methode showwindow zu integrieren, bekomme aber die ganze zeit fehler. In der Java-Doku steht es aber so.

Fehler:

-neben public menu() steht: invalid method declaration; return type required
-neben return menubar; steht: cannot return a value from method whose result type is void
-neben frame.setJMenuBar(menu()); steht: void type not allowed here
 

JanHH

Top Contributor
Jede Funktion benötigt einen Rückgabewert. Der Typ für "keinen Rückgabewert" ist void (=null und nichtig). Eine Funktion kann nur einen Wert zurückgeben, wenn sie nicht den Rückgabetyp "void" hat. Wenn eine Funktion bspws. einen String zurückgeben soll, muss sie als Rückgabetyp "String" haben (ist doch logisch, oder)?
 
G

Gast2

Gast
in diesem fall ist also JMenuBar der rückgabewert? Ich dachte der rückgabewert muss immer mittels return definiert werden.

nein ... mittels return gibt Du den Rückgabewert zurück

Java:
<visibility> [static] <returnvalue> <methodname>([<parameter>])

in Deinem Fall

Java:
public static JMenuBar menu()

setzt Dich mal bitte mit dem Thema Methoden und Methoden-Signaturen auseinander ... das sind mit die wichtigsten Grundlagen

hand, mogel
 
Bevor ich jetzt nen neuen Thread aufmache:

ich habe mir ein (klitze)kleines Adessbuch geschrieben, bekomme aber 2 Dinge nicht so wirklich hin:


Java:
package projekt2;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Main {

    public static JFrame aboutwindow(){
    JFrame aboutwindow = new JFrame("Über");
    JPanel aboutpanel = new JPanel();
    JLabel aboutlabel = new JLabel("Version 1.0");
    
    aboutwindow.setVisible(true);
    aboutwindow.setSize(100, 100);
    aboutwindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    aboutwindow.add(aboutpanel);
    aboutpanel.add(aboutlabel);
    return aboutwindow;
}


    static class aboutaction implements ActionListener{
     public void actionPerformed(ActionEvent e){
        aboutwindow();
    }
     }


    static public JMenuBar menu(){
    JMenuBar menubar = new JMenuBar();
    JMenu menu = new JMenu("Hilfe");
    JMenuItem about = new JMenuItem("Über...");

    menubar.add(menu);
    menu.add(about);

    about.addActionListener(new aboutaction());


    return menubar;

     }


    static public JTextField Name(){
        JTextField Name = new JTextField("Name");
        return Name;
    }

    static public JTextField Nachname(){
        JTextField Nachname = new JTextField("Nachname");
        return Nachname;
    }

    static public JTextField Telefon(){
        JTextField Telefon = new JTextField("Telefonnummer");
        return Telefon;
    }



    static public JTextArea Kontakte(){
        JTextArea Kontakte= new JTextArea(5, 20);
        

        Kontakte.setEditable(false);
        Kontakte.setMargin(new Insets(5,5,5,5));

        return Kontakte;
        }

    static public JScrollPane KontakteScroll(){
        JScrollPane KontakteScroll = new JScrollPane(Kontakte());
        return KontakteScroll();
    }

    static public void hinzufuegen(){
       String name = Name().getText();
       String nachname = Nachname().getText();
       String telefon = Telefon().getText();
       String newline = "/n";

       Kontakte().append(name + newline);
       Kontakte().append(nachname + newline);
       Kontakte().append(telefon + newline);

       Name().selectAll();
       Nachname().selectAll();
       Telefon().selectAll();

       Kontakte().setCaretPosition(Kontakte().getDocument().getLength());
 }
  
    static class hinzuaction implements ActionListener{
        public void actionPerformed (ActionEvent e){
            hinzufuegen();
        }
        
    }

    static public JButton Hinzu(){
        JButton Hinzu = new JButton("Hinzufügen");

        Hinzu.addActionListener(new hinzuaction());
        return Hinzu;
    }

    static public void showwindow(){
JFrame frame = new JFrame("Hallo");
JPanel panel = new JPanel();

frame.setSize(400, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setJMenuBar(menu());
panel.add(Name());
panel.add(Nachname());
panel.add(Telefon());
panel.add(Hinzu());
panel.add(Kontakte());
panel.add(KontakteScroll());
    }



public static void main(String[] args) {
       showwindow();
}
}

1.) wenn ich auf den Button Hinzufügen drücke tut sich gar nichts. Sinn dieses Buttons ist es aber, den text in den feldern Name Nachname und Telefon in die TextArea zu kopieren.

2.) wie binde ich diese verdammte Scrollpane ein. Ich habe schon alles Versucht, alle Dokus gelesen, aber ich bekomms einfach nicht hin.
 
Ich wüsste nicht, wie man das programm so unschreiben könnte, dass das static entfällt. Villeicht kann mir jemand anhand 1 methode ein beispiel geben, denn wenn ich nicht OOP programiere hat es lerntechnisch kaum sinn. Wie auch immer wir kommen vom eigentlichen problem ab.
 
B

bygones

Gast
im grunde alle statics weg und
Java:
public static void main(String[] args) {
       new Main().showwindow();
}
als Objekte erzeugen und mit denen Arbeiten
 
2 Probleme:

Java:
package projekt2;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Main {

    public JFrame aboutwindow(){
    JFrame aboutwindow = new JFrame("Über");
    JPanel aboutpanel = new JPanel();
    JLabel aboutlabel = new JLabel("Version 1.0");
    
    aboutwindow.setVisible(true);
    aboutwindow.setSize(100, 100);
    aboutwindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    aboutwindow.add(aboutpanel);
    aboutpanel.add(aboutlabel);
    return aboutwindow;
}


     class aboutaction implements ActionListener{
     public void actionPerformed(ActionEvent e){
        aboutwindow();
    }
     }


     public JMenuBar menu(){
    JMenuBar menubar = new JMenuBar();
    JMenu menu = new JMenu("Hilfe");
    JMenuItem about = new JMenuItem("Über...");

    menubar.add(menu);
    menu.add(about);

    about.addActionListener(new aboutaction());


    return menubar;

     }


        public JTextField Name(){
        JTextField Name = new JTextField("Name");
        return Name;
    }

        public JTextField Nachname(){
        JTextField Nachname = new JTextField("Nachname");
        return Nachname;
    }

        public JTextField Telefon(){
        JTextField Telefon = new JTextField("Telefonnummer");
        return Telefon;
    }



        public JTextArea Kontakte(){
        JTextArea Kontakte= new JTextArea(5, 20);
        

        Kontakte.setEditable(false);
        Kontakte.setMargin(new Insets(5,5,5,5));

        return Kontakte;
        }

        public JScrollPane KontakteScroll(){
        /*1.Problem:
         wie binde ich die JScrollPane richtig in die JTextArea Kontakte ein?*/
        JScrollPane KontakteScroll = new JScrollPane(Kontakte());
        return KontakteScroll();
    }

       public void hinzufuegen(){
       /*2.Problem:
         beim drücken des Buttons soll der Text der Textfelder in die JTextArea 
         kopiert werden*/
       String name = Name().getText();
       String nachname = Nachname().getText();
       String telefon = Telefon().getText();
       String newline = "/n";

       Kontakte().append(name + newline);
       Kontakte().append(nachname + newline);
       Kontakte().append(telefon + newline);
       Kontakte().append(newline);
       
       Name().selectAll();
       Nachname().selectAll();
       Telefon().selectAll();

       Kontakte().setCaretPosition(Kontakte().getDocument().getLength());
 }
  
    class hinzuaction implements ActionListener{
        public void actionPerformed (ActionEvent e){
            hinzufuegen();
        }
        
    }

    public JButton Hinzu(){
        JButton Hinzu = new JButton("Hinzufügen");

        Hinzu.addActionListener(new hinzuaction());
        return Hinzu;
    }

public void showwindow(){
JFrame frame = new JFrame("Hallo");
JPanel panel = new JPanel();

frame.setSize(400, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setJMenuBar(menu());
panel.add(Name());
panel.add(Nachname());
panel.add(Telefon());
panel.add(Hinzu());
panel.add(Kontakte());
panel.add(KontakteScroll());
    }



public static void main(String[] args) {
       new Main().showwindow();
}
}
 

André Uhres

Top Contributor
Versuch's mal so:
Java:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Main {
    private JTextArea taContacts;
    private JTextField tfName;
    private JTextField tfFirstname;
    private JTextField tfPhone;
    private JMenuBar menubar;
    private JScrollPane contactsScroll;
    private JMenu menuAid;
    private JFrame frame;
    private JButton btAdd;
    private JDialog aboutwindow;
    public JDialog aboutwindow() {
        if (aboutwindow == null) {
            aboutwindow = new JDialog(frame, "Über", true);
            JPanel aboutpanel = new JPanel();
            JLabel aboutlabel = new JLabel("Version 1.0");
            aboutwindow.setSize(100, 100);
            aboutwindow.setLocationRelativeTo(menuAid);
            aboutwindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            aboutwindow.add(aboutpanel);
            aboutpanel.add(aboutlabel);
        }
        aboutwindow.setVisible(true);
        return aboutwindow;
    }
    class aboutaction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            aboutwindow();
        }
    }
    public JMenuBar getMenubar() {
        if (menubar == null) {
            menubar = new JMenuBar();
            menuAid = new JMenu("Hilfe");
            JMenuItem about = new JMenuItem("Über...");
            menubar.add(menuAid);
            menuAid.add(about);
            about.addActionListener(new aboutaction());
        }
        return menubar;
    }
    public JTextField getName() {
        if (tfName == null) {
            tfName = new JTextField("Name");
        }
        return tfName;
    }
    public JTextField getFirstname() {
        if (tfFirstname == null) {
            tfFirstname = new JTextField("Nachname");
        }
        return tfFirstname;
    }
    public JTextField getPhone() {
        if (tfPhone == null) {
            tfPhone = new JTextField("Telefonnummer");
        }
        return tfPhone;
    }
    public JTextArea getContacts() {
        if (taContacts == null) {
            taContacts = new JTextArea(5, 20);
            taContacts.setEditable(false);
            taContacts.setMargin(new Insets(5, 5, 5, 5));
        }
        return taContacts;
    }
    public JScrollPane getContactsScroll() {
        if (contactsScroll == null) {
            contactsScroll = new JScrollPane(getContacts());
        }
        return contactsScroll;
    }
    public void add() {
        String name = getName().getText();
        String firstname = getFirstname().getText();
        String phone = getPhone().getText();
        String newline = "\n";
        getContacts().append(name + newline);
        getContacts().append(firstname + newline);
        getContacts().append(phone + newline);
        getContacts().append(newline);
        getName().selectAll();
        getFirstname().selectAll();
        getPhone().selectAll();
        getContacts().setCaretPosition(getContacts().getDocument().getLength());
        getName().requestFocusInWindow();
    }
    class addAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            add();
        }
    }
    public JButton getAdd() {
        if (btAdd == null) {
            btAdd = new JButton("Hinzufügen");
            btAdd.addActionListener(new addAction());
        }
        return btAdd;
    }
    public void showWindow() {
        frame = new JFrame("Hallo");
        JPanel panel = new JPanel();
        frame.setSize(400, 400);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.setJMenuBar(getMenubar());
        panel.add(getName());
        panel.add(getFirstname());
        panel.add(getPhone());
        panel.add(getAdd());
        panel.add(getContacts());
        panel.add(getContactsScroll());
        frame.setVisible(true);
    }
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                new Main().showWindow();
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}
 

André Uhres

Top Contributor
Beim Programmstart sind alle Variablen null. In unserem Fall darf nur dann ein Objekt neu erzeugt werden, wenn die entsprechende Variable noch null ist, sonst würde ja bei jedem folgenden Methodenaufruf das Objekt immer wieder neu erzeugt werden, statt daß einfach nur die Referenz auf das bestehende Objekt zurückgegeben wird.
 
@Andre

Danke für den gut verständlichen und übersichtlichen Code. Ich musste zwar noch ein paar methoden nachgucken, aber sonst ist mir klar was du da gemacht hast^^. Ich habs gerade compiliert und es hat wunderbar funktioniert. Ich werde an dem Projekt auf jedenfall weiterarbeiten (Datenbank um die Kontakte auch zu speichern wäre sinnvoll, stell ich mir aber schwer vor, zuerst aber werden die Buttons richtig angeordnet) und erweitern.

@Landei

Ich werds mir merken:)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Java Classen ordnen Java Basics - Anfänger-Themen 4
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
O Matrix ordnen Java Basics - Anfänger-Themen 4
S Erste Schritte Schleife zum ordnen von Zahlen in einem Arrays Java Basics - Anfänger-Themen 2
A 2 Arrays ordnen Java Basics - Anfänger-Themen 7
B Zahlen ordnen Java Basics - Anfänger-Themen 8
H Methoden Lotto-Programm, Methoden ordnen & umbennen Java Basics - Anfänger-Themen 4
M Liste nach bestimmten Kriterien ordnen Java Basics - Anfänger-Themen 9
D String alphabetisch "ordnen" Java Basics - Anfänger-Themen 26
N Integer Array der Größe nach ordnen Java Basics - Anfänger-Themen 1
K Strings der Größe nach ordnen Java Basics - Anfänger-Themen 5
F Directory nach Alphabet ordnen Java Basics - Anfänger-Themen 3
J Zahlen ordnen Java Basics - Anfänger-Themen 9
M Inhalte eines Vectors alphabetisch ordnen Java Basics - Anfänger-Themen 8
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
Kydo Beschreibung meines programms Java Basics - Anfänger-Themen 2
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
C Überprüfen eines Programms auf Syntaxfehler Java Basics - Anfänger-Themen 3
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
A Strukturierung des Programms Java Basics - Anfänger-Themen 7
A Erste Schritte Ausgabe eines compare Programms Java Basics - Anfänger-Themen 4
S Klassen Dekompilen eines Programms unsicher? Java Basics - Anfänger-Themen 6
V Erste Schritte Anfänger: Ausführen eines Java-Programms Java Basics - Anfänger-Themen 5
U Erste Schritte Aufbau eines kleinen Matrizen-Programms(MVC; OOP) Java Basics - Anfänger-Themen 20
L Compiler-Fehler Komische Ausgabe meines Programms Java Basics - Anfänger-Themen 6
D Fehlermeldung beim Ausführen eines Java Programms Java Basics - Anfänger-Themen 4
R Brauche Hilfe beim fertigstellen eines Chat programms Java Basics - Anfänger-Themen 8
Streeber reale Laufzeit meines Programms ausgeben Java Basics - Anfänger-Themen 1
S Class File Editor gibt beim Start der Programms die Fehlermeldung Source not found aus Java Basics - Anfänger-Themen 1
A DezimalZuBinär - Erklärung der Vorgehensweise des Programms Java Basics - Anfänger-Themen 4
N Modellierung eines Programms in UML (Klassendiagramm) Java Basics - Anfänger-Themen 2
K Erste Schritte Brauche Hilfe bei Starten des Programms Java Basics - Anfänger-Themen 11
L Erste Schritte Layout eines Java Programms Java Basics - Anfänger-Themen 5
F Zugriff auf Pfad des gerade ausgeführten Programms? Java Basics - Anfänger-Themen 14
T Erste Schritte Teilausgabe eines Programms Java Basics - Anfänger-Themen 2
M Ausführen des ersten Java Programms Java Basics - Anfänger-Themen 2
P Bild beim Öffnen des Programms einbleden Java Basics - Anfänger-Themen 2
L Öffnen des Programms nach kompilieren nicht möglich Java Basics - Anfänger-Themen 3
C Prozess wird erst bei Beendigung des Programms ausgeführt Java Basics - Anfänger-Themen 2
I Problem beim Schreiben eines ersten Programms Java Basics - Anfänger-Themen 3
A Aktueller Pfad des Programms (.jar) ermitteln Java Basics - Anfänger-Themen 10
1 Textfeld aktiv beim starten des Programms Java Basics - Anfänger-Themen 5
A Fenstertitel eines anderen Programms Java Basics - Anfänger-Themen 2
C Neustart des Programms Java Basics - Anfänger-Themen 4
L Probleme beim Ausführen des Programms Java Basics - Anfänger-Themen 9
C Aufruf eines Java Programms aus einem anderen Java Programm Java Basics - Anfänger-Themen 3
H Optische Aufmachung meines Programms Java Basics - Anfänger-Themen 76
W GUI des Programms als Bild in word Java Basics - Anfänger-Themen 5
M Frage zu einem Parameter Eingabe eines programms Java Basics - Anfänger-Themen 3
H Frage zur Ausgabe eines Programms Java Basics - Anfänger-Themen 3
M Consolenprogrtammierung und weiterführen des Programms Java Basics - Anfänger-Themen 7
0 Folgender Fehler beim Ausführen eines Java Programms Java Basics - Anfänger-Themen 8
B Absturz der VM bei Ausführung meines Programms Java Basics - Anfänger-Themen 3
K Hilfe beim starten eines Programms! Bitte helfen. Java Basics - Anfänger-Themen 8
E Vermeiden,dass mehrere Instanzen eines Java-Programms laufen Java Basics - Anfänger-Themen 2
G Problem beim Ausführen eines Programms Java Basics - Anfänger-Themen 3
I Probleme beim ausführen des Programms Java Basics - Anfänger-Themen 6
B Aufbau eines Programms Java Basics - Anfänger-Themen 10
F Kontrolle des Programms an Frame übergeben und wieder zurück Java Basics - Anfänger-Themen 2
B Problem beim Ausführen eines Java Datenbank Programms Java Basics - Anfänger-Themen 6
G wie finde ich den pfad meines programms raus? Java Basics - Anfänger-Themen 2
P Verzeichnis meines Programms Java Basics - Anfänger-Themen 4
J Menü-strip beenden-knopf mit Ende des Programms belegen ? Java Basics - Anfänger-Themen 2
L Problem beim ausführen des Programms Java Basics - Anfänger-Themen 14
G Pfad des Programms Java Basics - Anfänger-Themen 4
D Schließen einer Datenverbindung mit schließen der Programms Java Basics - Anfänger-Themen 3
A Code während des laufenden Programms eingeben Java Basics - Anfänger-Themen 7
D Öffnen eines anderen Programms Java Basics - Anfänger-Themen 3
D Vereinfachung dieses Programms Java Basics - Anfänger-Themen 11
V Teil eines Programms funktioniert einfach nicht Java Basics - Anfänger-Themen 2
G Problem beim Kompilieren eines HelloWorld-Programms Java Basics - Anfänger-Themen 7
J Probleme beim Erstellen eines Programms Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben