über Button andere Java Klasse aufrufen

kakulala

Mitglied
Hey Leute,
ich habe eine Oberfläche (Container mit 2 Buttons). Der erste Buttonaufruf funktioniert, jetzt habe ich jedoch ein Programm geschrieben, dass einen XY-Graphen wiedergeben soll. Dieses soll aufgerufen werden, wenn man auf den zweiten Button klickt. Leider funktioniert es nicht. Ich habe im ActionListener (in meiner Klasse leftPanel) bereits ein neues Objekt das auf die Graphen-Klasse zeigt angelegt. (die Klassen befinden sich auch alle im gleichen Ordner ;-) )
vielleicht findet ja jmd meinen Fehler...
meine main:
Java:
public class main {
    public static void main(String[]args){
        new mainGui();
    }

}


meine mainGui
Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class mainGui extends JFrame {
  
    private static final long serialVersionUID = 5257812626494937069L;
 

    final protected String WELCOME = "Grüße";
    final protected String SCHRITT1 = "Test1";
    final protected String SCHRITT2 = "Graph";
  
  
    protected leftPanel jpLeft = new leftPanel(this);
    protected mainPanel jpMain = new mainPanel(this);
    public mainGui() {
     
      
        GridBagLayout gbl = new GridBagLayout();
        Container container = this.getContentPane();
        gridBagLayoutHelper.addComponent(container, gbl, jpLeft, 0, 0, 1, 1, 0.2, 1);
        gridBagLayoutHelper.addComponent(container, gbl, jpMain, 1, 0, 1, 1, 0.8, 1);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(gbl);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        d = new Dimension(d.width/2,d.height/2);
        this.setSize(d);
        this.setLocationRelativeTo(null);
        this.setTitle("Test des Programms");
        this.setVisible(true);
    }
 
}

mein leftPanel (mit Klasse ActionListener)
Java:
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class leftPanel extends JPanel implements ActionListener {
    /**
     *
     */
  
    private JButton Schritt1;
    private JButton Schritt2;
    private mainGui parent;
    public leftPanel(mainGui parent) {
        this.parent = parent;
        GridBagLayout gbl = new GridBagLayout();
        Container container = this;
        Schritt1 = new JButton("Schritt 1");
        Schritt2 = new JButton("Schritt 2");
        Schritt1.setActionCommand("Schritt_1");
        Schritt1.addActionListener(this);
      
        Schritt2.setActionCommand("Schritt_2");
        Schritt2.addActionListener(this);
        gridBagLayoutHelper.addComponentPadding(container, gbl, Schritt1, 0, 0, 1, 1, 1, 1);
        gridBagLayoutHelper.addComponentPadding(container, gbl, Schritt2, 0, 1, 1, 1, 1, 1);
     
        this.setLayout(gbl);
    }
  
    @Override
    public void actionPerformed(ActionEvent event) {
        if (event.getActionCommand().equals("Schritt_1")) {
            CardLayout cl = (CardLayout) (parent.jpMain.getLayout());
            cl.show(parent.jpMain, parent.SCHRITT1);
           //funktionierender Button bzw Progammaufruf
            test t = new test(parent);
        } else if (event.getActionCommand().equals("Schritt_2")) {
            CardLayout cl = (CardLayout) (parent.jpMain.getLayout());
            cl.show(parent.jpMain, parent.SCHRITT2);
            graph c = new graph(parent);
        }
      
      
    }
}

Mein mainPanel:
Java:
import java.awt.CardLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class mainPanel extends JPanel{
  
    private static final long serialVersionUID = 3250453526650826616L;
    private mainGui parent;
    public mainPanel(mainGui parent){
        this.parent = parent;
        this.setLayout(new CardLayout());
      
       
        JPanel card1 = new JPanel();
        card1.add(new JLabel("Hallo Nutzer, willkommen"));
        JPanel card2 = new JPanel();
        card2.add(new JLabel("Schritt 1 ausgeführt"));
        JPanel card3 = new JPanel();
        card3.add(new JLabel("Schritt 2 ausgeführt"));
      
      
        //Hinzufügen der 'cards' zum Mainpanel
        //über den Hinteren String können sie nach vorne geholt werden
        this.add(card1, parent.WELCOME);
        this.add(card2, parent.SCHRITT1); 
        this.add(card3, parent.SCHRITT2); 
     
       
       
    }
}


mein gridBagLayout
Java:
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
public class gridBagLayoutHelper {
  
    public static void addComponent(Container cont, GridBagLayout gbl,
            Component c, int x, int y, int width, int height, double weightx,
            double weighty) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.WEST;
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        gbl.setConstraints(c, gbc);
        cont.add(c);
    }
    public static void addComponentFill(Container cont, GridBagLayout gbl,
            Component c, int x, int y, int width, int height, double weightx,
            double weighty) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        gbl.setConstraints(c, gbc);
        cont.add(c);
    }

    public static void addComponentPadding(Container cont, GridBagLayout gbl,
            Component c, int x, int y, int width, int height, double weightx,
            double weighty) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.WEST;
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.weightx = weightx;
        gbc.weighty = weighty;
        // Padding von 10 in alle Richtungen
        gbc.insets = new Insets(10, 10, 10, 10);
        gbl.setConstraints(c, gbc);
        cont.add(c);
    }
}

und mein Graph (welches bei Schritt 2 ausgelöst werden sollte, aber nicht funktioniert)

Java:
import java.awt.*;
import java.io.*;
import java.text.*;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.*;
import org.jfree.ui.*;

public class Graph {

  
    public Graph(mainGui parent) {
  
        EventQueue.invokeLater(() -> {
            ApplicationFrame frame = new ApplicationFrame("Anzeige der Testwerte");
            Graph test = new Graph(parent);
            try {
                frame.add(test.createChart("Test"));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
  
    /*
  
    //Main-Methode, damit das Programm einzeln laufen kann
    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            ApplicationFrame frame = new ApplicationFrame("Anzeige der Testwerte");
            Graph test = new Graph();
            try {
                frame.add(test.createChart("Test"));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }

    */
  
    private ChartPanel createChart(String chartTitle) throws IOException {
        //title, x-axis label, y-axis label, data, create legend?, generate tooltips?, generate URLs?
        JFreeChart chart = ChartFactory.createTimeSeriesChart(chartTitle,
                "Zeit", "Testwerte", createDataset(), true, true, false);
        ChartPanel chartPanel = new ChartPanel(chart);
        XYPlot plot = chart.getXYPlot();
        DateAxis axis = (DateAxis) plot.getDomainAxis();
        SimpleDateFormat df = new SimpleDateFormat("HH:mm:ssX");
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
        axis.setDateFormatOverride(SimpleDateFormat.getTimeInstance());
        plot.setBackgroundPaint(Color.WHITE);
        return chartPanel;
    }

    private TimeSeriesCollection createDataset() throws IOException {
        //Klassifizierung der Textdatei + Inhalt
        File test = new File("test.txt");
        String line1;
        String line2;
        try ( // Einlesen der Textdatei
                BufferedReader br = new BufferedReader(new FileReader(test))) {
            //Inhalt wird zeilenweise gelesen
            line1 = br.readLine();
            line2 = br.readLine();
        }
      
      

        //TimeSeries wird kreiert
        TimeSeries series = new TimeSeries("Testwerte");
        TimeSeriesCollection dataset = new TimeSeriesCollection(series);

        //......
  
      
        return (TimeSeriesCollection) dataset;
    }

    //......

}
 

kakulala

Mitglied
Ich hab mein Programm jetzt ausgebessert, also es funktioniert :)
Hat vielleicht noch jemand ne Idee, wie ich die Anzeige also die Klasse "Graph" wieder beende?? wenn ich den Button aufrufe, erscheint nun der Graph aber in einer Endlosschleife....wie stopp ich das?
 

kakulala

Mitglied
Wie sollen wir das ohne den "ausgebesserten" Code wissen?
Wenn du ihn nicht ausgebessert hättest, würe ich vermuten, dass es irgendwie an der Endlosschleife liegt, die dadurch entsteht, weil im Konstruktor von Graph der Konstruktor von Graph aufgerufen wird.
Der Code ist schon ausgebessert, hab im Actionlistener das Objekt falsch benannt....aber die Endlosschleife hab ich ned bemerkt...
wie beende ich die denn am besten?
 

VfL_Freak

Top Contributor
Moin,
nochmal:
Java:
public Graph(mainGui parent)  // DIES IST DEIN KONSTRUKTOR !!
{
    EventQueue.invokeLater(() ->
    {
         ApplicationFrame frame = new ApplicationFrame("Anzeige der Testwerte");
         Graph test = new Graph(parent);  // HIER RUFST DU IHN IMMER WIEDER NEU AUF --> endlose verschachtelung !!!!
// ...
    });
}  // END OF KONSTRUKTOR !!
Außerdem machst Du auch nichts weiter mit "test" ....
Aber so wirklich durchblicke ich die Intension Deines Codes auch nicht wirklich :(

VG Klaus
 

kakulala

Mitglied
Außerdem machst Du auch nichts weiter mit "test" ....
in der darauffolgenden Try-Catch brauche ich ihn halt... für den Chart


Java:
public Graph()
{
    EventQueue.invokeLater(() ->
    {
         ApplicationFrame frame = new ApplicationFrame("Anzeige der Testwerte");
         Graph test = new Graph();
try {
                frame.add(test.createChart("Test")); <- Hier verwende ich test nochmal
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
// ...
    });
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
M Swing Eine andere Klasse über Button starten und in TextArea ausgeben AWT, Swing, JavaFX & SWT 13
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
L Button über/auf JTextField AWT, Swing, JavaFX & SWT 5
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
K JButton nur dann aktivieren, wenn die Mouse 3 Sek. über dem Button bleibt AWT, Swing, JavaFX & SWT 2
F Swing Beenden eines ActionListener über einen Button AWT, Swing, JavaFX & SWT 8
G Maus über Button AWT, Swing, JavaFX & SWT 3
A 1 JFrame und 3 Panel Nacheinander anzeigenlassen über Button AWT, Swing, JavaFX & SWT 5
M Container in Frame über Button einfügen? AWT, Swing, JavaFX & SWT 4
D Daten über Button-Druck in JTable einfügen AWT, Swing, JavaFX & SWT 7
S Anwendung über Button beenden? AWT, Swing, JavaFX & SWT 4
G Neues Frame über Button öffnen lassen AWT, Swing, JavaFX & SWT 15
G Mauszeiger über Button AWT, Swing, JavaFX & SWT 13
F JFrame über Button schliessen AWT, Swing, JavaFX & SWT 10
I JTextfield senden über Enter AWT, Swing, JavaFX & SWT 1
T Scene wechseln über ManuItem AWT, Swing, JavaFX & SWT 7
I JavaFX - Pane wechseln über 2. Controller AWT, Swing, JavaFX & SWT 5
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
A Layoutwechsel über RadioButtons AWT, Swing, JavaFX & SWT 3
missy72 JavaFX Performance / ImageView in TableView über TimeLine AWT, Swing, JavaFX & SWT 1
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
J Spielfelder auch über die Tastatureingabe (1…9) ansteuern (Tic Tac Toe) AWT, Swing, JavaFX & SWT 2
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
G LayoutManager Panels anordnen über Schleifenvariablen AWT, Swing, JavaFX & SWT 7
F Verzeichnis über GUI erstellen AWT, Swing, JavaFX & SWT 2
T GUI über Tastatur bedienen AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
L JavaFX TreeView Edit Mode über F2 AWT, Swing, JavaFX & SWT 13
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
A 2D-Grafik Zeichen werden über unabhängingen JRadioButton nicht gefüllt AWT, Swing, JavaFX & SWT 28
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
C JavaFX ScrollPane schießt über das Ziel hinaus... AWT, Swing, JavaFX & SWT 1
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
R Ausgabe über JOptionPane.showMessageDialog funktioniert nicht AWT, Swing, JavaFX & SWT 2
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
L JavaFX Hover Effekt über das Parent Element AWT, Swing, JavaFX & SWT 4
C JavaFX GUI - Entscheidung über Framework AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
Augenblau JavaFX Externe Schriftart über CSS ansprechen und zuweisen AWT, Swing, JavaFX & SWT 5
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
Z JAVAFX Stage über Controller weitergeben um css-file zu laden AWT, Swing, JavaFX & SWT 4
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
O JTextfield wird über'drawed'.. AWT, Swing, JavaFX & SWT 6
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
J JTable aktuallisieren über anderen Frame AWT, Swing, JavaFX & SWT 6
kaoZ Swing JFrame lässt sich nicht über dispose() abbauen AWT, Swing, JavaFX & SWT 0
P Vorteile von Tooltip nutzen (wird über allen anderen Objekten angezeigt) AWT, Swing, JavaFX & SWT 3
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
B Swing Borderlayout East über North AWT, Swing, JavaFX & SWT 5
D Swing Letzte Zeile einer JTable nicht über RowSorter sotieren AWT, Swing, JavaFX & SWT 2
C Methode über Buttonklick starten AWT, Swing, JavaFX & SWT 8
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
K GUI Elemente über eine separate Textdatei beschriften? AWT, Swing, JavaFX & SWT 4
A Bild über Imageviewer auf GUI anzeigen AWT, Swing, JavaFX & SWT 3
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
A Swing JTable wird nicht über zurückegebene Referenz geaddet.Wieso nicht? AWT, Swing, JavaFX & SWT 5
D JTextField über ein Game AWT, Swing, JavaFX & SWT 11
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
R JTextField mit abgerundeten Ecken - Geht über Grenze hinaus AWT, Swing, JavaFX & SWT 4
S JDialog direkt über dem MainFrame aufpoppen lassen AWT, Swing, JavaFX & SWT 2
P versch. JPanel Klassen über Menü öffnen AWT, Swing, JavaFX & SWT 12
P Öffnen, Speichern von Dat. über DialogBoxen AWT, Swing, JavaFX & SWT 10
R Bewglichen Rahmen über einem Bild AWT, Swing, JavaFX & SWT 3
P Listenelemente über Checkbox löschen AWT, Swing, JavaFX & SWT 6
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
S SWT Anzeigen einer lokalen HTML-Seite im Browser Widget über RAP nicht möglich AWT, Swing, JavaFX & SWT 3
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
C Linien über GridLayout zeichnen AWT, Swing, JavaFX & SWT 3
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
K Swing JButton über JLabel AWT, Swing, JavaFX & SWT 6
S AWT Skalieren von Polygon über Area klappt nicht AWT, Swing, JavaFX & SWT 4
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
L LayoutManager Componenten über verfügbaren Platz strecken AWT, Swing, JavaFX & SWT 7
C Java-applikation über Fullscreen AWT, Swing, JavaFX & SWT 4
F Panels über buttons zu anderen Panels hinzufügen AWT, Swing, JavaFX & SWT 2
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
M Hover-Farbe über Hintergrundfarbe legen AWT, Swing, JavaFX & SWT 3
A Swing Gleichmäßige Verteilung der Tabellenzeilen über den gesammten Tabellenbereich AWT, Swing, JavaFX & SWT 5
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15

Ähnliche Java Themen

Neue Themen


Oben