Swing Messwerte mit GUI verarbeiten, Klassenübergreifend

RedEagle

Mitglied
Servus :)
Ich bin jetzt schon seit mehreren Tagen an diesem Problem und komme einfach nicht mehr weiter. Es geht darum, dass ich ein Programm geschrieben habe, in welchem eingegebene Messwerte in einer ArrayList gespeichert werden und dann z.B die größte/kleinste Zahl etc. ausgegeben werden kann. Jetzt möchte ich das ganze aber mit einem GUI programmieren, damit man das Programm auch benutzen kann. Im Output Fenster sollen Anweisungen stehen, was als nächstes gemacht werden soll. Im Input Fenster soll man dann die Werte als Double eingeben. Wenn man dann links auf Finish drückt, soll dann die Gesamte ArrayList in dem rechten TextFeld abgebildet werden und dann je nach Methode (Die anderen Knöpfe Rechts) sortiert werden. Klingt einfach, ich bin aber am Verzweifeln.

Ich arbeite mit JavaSE-12 und dem Windowbuilder von Eclipse. In meiner ersten Klasse hab ich den ganzen Code was die Berechnungen betrifft, in der zweiten Klasse liegt der Code für das GUI. So sieht das Fenster bis jetzt aus.
1599990789075.png

Hier mal der gesamte Quellcode der ersten Klasse.
Java:
import java.util.*;

import java.io.*;

public class MessWerte {
    
    //Datenfeld wird initialisiert
    private static ArrayList<Double> messwerte = new ArrayList<Double>();
    private static Scanner scanner = new Scanner(System.in);
    private static boolean weiter = true;
    private static boolean cont = true;
    
    
    
    //Main Methode
    public static void main(String[] args) throws Exception{
        
        GUI gui = new GUI();
        gui.setVisible(true);
        
        //Try-Catch Block um Programmabstürze zu vermeiden
        try {
            while(weiter == true) {
                if(weiter == true) {
                    //Abfrage ob man einen messwert hat
                    System.out.println("Haben Sie einen Messwert? (y/N)");
                    String nextString = scanner.next();
                    if(nextString.equals("y")) {
                        //Eingabe des Messwertes
                        System.out.println("Geben Sie einen Wert sein.");
                        messwerte.add(scanner.nextDouble());
                        weiter = true;
                    } else if(nextString.equals("N")) {
                        //Abfrage ob ArrayList leer ist, falls ja wieder zurück zum Anfang, falls nein, wird eine Txt Datei mit den Werten erstellt.
                        if(messwerte.isEmpty()) {
                            System.out.println("Es gibt keine Messwerte!");
                            weiter = true;
                        } else {
                            weiter = false;
                            File datei = new File(System.getProperty("user.home") + "//Desktop//Messwerte.txt");
                            
                            datei.createNewFile();
                            
                            PrintWriter pw = new PrintWriter(new FileWriter(datei));
                            pw.println(messwerte);
                            pw.flush();
                            pw.close();
                            
                        }
                    }
                }   
            }
        } catch (Exception f) {
            f.printStackTrace();
        }
        
        
        
        
        try {
            do {
                //Abfrage wie man Fortfahren möchte. je nach eingabe werden die Entsprechenden methoden aufgerufen.
                //Nach Aufruf der Methode kann ein anderer Vorgang aufgerufen werden.
                System.out.println("Liste wurde erstellt. Wie wollen Sie fortfahren? (min/max/mid/med/all/exit)");
                String nextString = scanner.next();
                
                if(nextString.equals("min")) {
                    minMesswertErmitteln();

                } else if(nextString.equals("max")) {
                    maxMesswertErmitteln();

                } else if(nextString.equals("mid")) {
                    mittelwertErmitteln();

                } else if(nextString.equals("med")) {
                    medianErmitteln();
                    
                } else if(nextString.equals("exit")) {
                    exit();
                    
                } else if(nextString.equals("all")) {
                    alleWerteAusgeben();
                } else {
                    System.out.println("Bitte \"min\" (kleinster Wert), \"max\" (groesster Wert), \"mid\" (Mittelwert), \"med\" (median), \"all\" (alle Werte) oder \"exit\" (beenden) eingeben.");
                }
            }while(true);
        } catch (Exception g) {
            g.printStackTrace();
        }
    }
        
    
    
    
    //Methode um alle Werte auszugeben.
    public static void alleWerteAusgeben() {
            for(int i = 0; i < messwerte.size(); i++) {
                System.out.println(messwerte.get(i));
            }
        
    }
    
    
    //Methode um den maximalen/höchsten Messwert zu ermitteln.
    public static void maxMesswertErmitteln() {
        try {
            System.out.println("Der groesste aller Werte ist: " + Collections.max(messwerte));
        } catch (Exception e) {
            e.printStackTrace();
        }   
    }
    
    
    //Methode um den minimalen/kleinsten Messwert zu ermitteln.
    public static void minMesswertErmitteln() {
        try {
            System.out.println("Der kleinste aller Werte ist: " + Collections.min(messwerte));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
    //Freiwillige Aufgabe: Methode um den Mittelwert zu ermitteln (Alle Werte Addieren und dann durch die Anzahl der Werte teilen)
    public static void mittelwertErmitteln() {
        try {
            double zaehler = 0;
            double summe = 0 ;
            
            for(int i = 0; i < messwerte.size(); i++) {
                zaehler += messwerte.get(i);
                summe = zaehler;
            }
            System.out.println("Der Mittelwert aller Werte betr�gt: " + summe / messwerte.size());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
    
    //Sonderaufgabe: Methode um den Medianwert der Messwerte zu ermitteln. Hierbei werden alle Werte von klein nach gross sortiert und dann der Mittlere Wert genommen.
    //Falls die Anzahl der Werte ungerade ist, werden die beiden Mittleren Zahlen addiert und durch 2 geteilt.
    public static void medianErmitteln() {
        try {
            double median;
            if(messwerte.size() % 2 != 0) {
                Collections.sort(messwerte);
                System.out.println("Der Medianwert aller Werte betraegt: " + messwerte.get(messwerte.size() / 2));
            } else {
                Collections.sort(messwerte);
                median = (messwerte.get(messwerte.size()/2)) + (messwerte.get(messwerte.size()/2 - 1));
                System.out.println("Der Medianwert aller Werte betraegt: " + median / 2);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }   
    }
    
    
    
    //Freiwillige Aufgabe: Methode um das Programm zu beenden.
    public static void exit() {
        System.out.println("Programm wurde beendet, ihre Werte wurden gespeichert. Sie finden sie auf Ihrem Desktop als \"Messwerte.txt\"");
        System.exit(0);
    }
}

Und hier ist das GUI:
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;

public class GUI extends JFrame {

    private JPanel contentPane;
    private JTextField txtField_output;
    private JTextField txtField_arrayList;
    private JTextField txtField_input;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    GUI frame = new GUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public GUI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1042, 553);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        txtField_output = new JTextField();
        txtField_output.setEditable(false);
        txtField_output.setBounds(5, 5, 382, 355);
        contentPane.add(txtField_output);
        txtField_output.setColumns(10);
        
        txtField_arrayList = new JTextField();
        txtField_arrayList.setEditable(false);
        txtField_arrayList.setBounds(397, 5, 382, 355);
        contentPane.add(txtField_arrayList);
        txtField_arrayList.setColumns(10);
        
        txtField_input = new JTextField();
        txtField_input.setBounds(5, 371, 1016, 138);
        contentPane.add(txtField_input);
        txtField_input.setColumns(10);
        
        JButton btn_mid = new JButton("Mid");
        btn_mid.setBounds(789, 71, 227, 49);
        contentPane.add(btn_mid);
        
        JButton btn_med = new JButton("Med");
        btn_med.setBounds(789, 131, 227, 49);
        contentPane.add(btn_med);
        
        JButton btn_min = new JButton("Min");
        btn_min.setBounds(789, 191, 227, 49);
        contentPane.add(btn_min);
        
        JButton btn_max = new JButton("Max");
        btn_max.setBounds(789, 251, 227, 49);
        contentPane.add(btn_max);
        
        JButton btn_all = new JButton("All");
        btn_all.setBounds(789, 311, 227, 49);
        contentPane.add(btn_all);
        
        JButton btnNewButton_5 = new JButton("Finish");
        btnNewButton_5.setBounds(789, 5, 227, 55);
        contentPane.add(btnNewButton_5);
    }
}
 

RedEagle

Mitglied
Habe die Ehre.


Wobei? Gibt es eine konkrete Frage?

Yeah, ich kriege es nicht hin. Also das Programm funktioniert, aber nur in der Konsole. Ich weiß nicht, wie ich z.B die Methoden von meiner main Klasse in der JFrame Klasse verwenden kann, damit mein Programm funktioniert. Ich habe mit JFrame noch nie wirklich gearbeitet. Wie kann ich die einzelnen JFrame Elemente so verknüpfen, dass mein Programm funktioniert? Es gibt keine Konkrete Frage, da ich eigentlich gar keine Ahnung habe, wonach ich fragen soll. Sorry ^^
 

mihe7

Top Contributor
Ich weiß nicht, wie ich z.B die Methoden von meiner main Klasse in der JFrame Klasse verwenden kann, damit mein Programm funktioniert. I
Gar nicht, weil die Methoden zu viel machen, nämlich z. B. ein Maximum ermitteln und auf der Konsole ausgeben. Du müsstest also erst einmal die Aufgaben trennen: die "xxxErmitteln"-Methoden müssen den ermittelten Wert per return zurückgeben. Dann kannst Du sie auch für andere Zwecke als die Konsolenausgabe verwenden.
 

RedEagle

Mitglied
Gar nicht, weil die Methoden zu viel machen, nämlich z. B. ein Maximum ermitteln und auf der Konsole ausgeben. Du müsstest also erst einmal die Aufgaben trennen: die "xxxErmitteln"-Methoden müssen den ermittelten Wert per return zurückgeben. Dann kannst Du sie auch für andere Zwecke als die Konsolenausgabe verwenden.
Ahhh okay, das ist sicher schonmal hilfreich. Danke erstmal, probiere es im laufe des Tages nochmal. Falls ich noch weitere Fragen hab, melde ich mich nochmal :D
 

Ähnliche Java Themen


Oben