Frame Schließen und neustarten

LiVo

Mitglied
Hallo :)
Mal ne frage wisst ihr ne Möglichkeit eine GUI auf knopfdruck zu Resetten?
Also auf den Ursprungszustand zu setzen?
So als wäre es gerade erst geöffnet worden?
 
B

...ButAlive

Gast
Ja kenne ich. Pauschal lässt sich deine Frage nicht beantworten. Wenn du deine Gui nach dem MVC-Pattern implementiert hat ist es einfach. Man muss nur das Model auf den Zustand den es beim Start hatte zurücksetzten, bzw. ein neues Model erzeugen und dieses dann setzten. Wenn du kein MVC hast hängt es von deinem Code ab.
 

LiVo

Mitglied
Für diesen Fall hier:
Java:
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.*;
public class calc extends JFrame implements ActionListener {
	private static final long serialVersionUID = 1054322144645546640L;
	
	String gegeben = null;
	double myGegeben = 0.0;
	double myToPay = 0.0;
	JButton[] numbers; 
	JButton storno = new JButton("Eingabe Verwerfen");
	JButton payed = new JButton ("oK");
	public JLabel Betrag = new JLabel("Zu zahlender Betrag: ");
	JLabel gezahlt = new JLabel("Gezahlt:");
	JLabel rueck = new JLabel ("Rückgeld: ");
	JTextArea output = new JTextArea(1,10);
	JTextArea input = new JTextArea(1,10);
	JTextArea toPay = new JTextArea(1,10);
	String[] buttonnames = {"1", "2", "3", "4", "5",
							"6", "7", "8", "9","0", ".", ".00"};
	JPanel mPan = new JPanel();
	JPanel butPan = new JPanel(new GridLayout(4,3));
	JPanel  panl = new JPanel(new GridLayout(3,1));
	JDBCAdapter summe = new JDBCAdapter(
			"jdbc:mysql://localhost/restaurant",
			"com.mysql.jdbc.Driver",
			"root",
			"");	
	 public calc(){
		
		mPan.add(panl);
		mPan.add(butPan);
		panl.add(Betrag);
		panl.add(toPay);
		panl.add(gezahlt); 
		panl.add(input);
		input.setEditable(false);
		toPay.setEditable(false);
		 numbers = new JButton[buttonnames.length];
		 for(int i = 0; i<buttonnames.length; i++){
			numbers[i] = new JButton(buttonnames[i]);
			numbers[i].setVisible(true);
			numbers[i].addActionListener(this);
			butPan.add(numbers[i]);
		 }
		 panl.add(rueck);
		 panl.add(output);
		 panl.add(payed);
		 payed.addActionListener(this);
		 panl.add(storno);
		 storno.addActionListener(this);
		 output.setEditable(false);
		 panl.setVisible(true);
		 panl.setPreferredSize(new Dimension(200,50));
		 butPan.setPreferredSize(new Dimension(200, 200));
		 butPan.setVisible(true);
		 this.setSize(300, 300);
		 this.setDefaultCloseOperation(HIDE_ON_CLOSE);
		 this.add(mPan);
		 this.setVisible(true);
	 }

	public void actionPerformed(ActionEvent calcAE) {

	  try {
		for (int i = 0; i<buttonnames.length; i++){
			if (calcAE.getSource() == numbers[i]){
				input.setText(input.getText()+""+numbers[i].getText());
				gegeben = input.getText();
				myGegeben = Double.parseDouble(gegeben);	
				System.out.println(myGegeben);
			}
		}
	  }
	  catch(NumberFormatException nfe) {
		  
	  }
	  if (calcAE.getSource() == payed){
		 System.out.println(myGegeben); 
		 String StrToPay = toPay.getText();
		  myToPay = Double.parseDouble(StrToPay);
		  double rech = (myToPay-myGegeben);
		  output.setText(""+rech);
		  try {
			  String insertme = output.getText();
			summe.statement.executeUpdate("INSERT INTO Bon " + 
	                "VALUES (null, '"+insertme+"', '0000-00-00 00:00:00', 0)"); 
		} catch (SQLException e) {
			e.printStackTrace();
		}
		  this.dispose();
	  }
	  if (calcAE.getSource() == storno){
		  output.setText("");
		  input.setText("");
		  gegeben = null;
		  myGegeben = 0.0;
		  myToPay = 0.0;
	  }
	}
}
und
Java:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class produkts extends JFrame implements ActionListener {
	private static final long serialVersionUID = 1L;
	
	JDBCAdapter prods = new JDBCAdapter(
			"jdbc:mysql://localhost/restaurant",
			"com.mysql.jdbc.Driver",
			"root",
			"");
	calc rechner;
	int[] a;
	double[] zwsum;
	double sum; 
	JLabel design = new JLabel("");
	JLabel[] zwischensumme = new JLabel[18];
	JButton[] buttons;
	JButton pay = new JButton("Bezahlen");
	String[] buttonnames;
	double[] price;
	JPanel besteller = new JPanel(new GridLayout(10, 0));
	JButton storno = new JButton("STORNO!");

	
	public produkts(){
		
		rechner = new calc();
		
	//	mainPan.setLayout(null);
		rechner.setVisible(false);
		prods.executeQuery("SELECT Artikel_Name FROM artikel");
		buttonnames = new String[prods.getRowCount()];
		buttons = new JButton[prods.getRowCount()];
		  
		for(int i=0; i<prods.getRowCount(); i++){
			buttonnames[i] = (""+prods.getValueAt(i, 0));
			buttons[i] = new JButton(buttonnames[i]);
			buttons[i].addActionListener(this);
			besteller.add(buttons[i]);
		}	
		
		for(int j=0; j<18; j++){
			zwischensumme[j] = new JLabel("");
			besteller.add(zwischensumme[j]);
		}
	
		zwsum = new double[20];
		a = new int[20];
		besteller.add(pay);
		pay.addActionListener(this);
		besteller.add(storno);
		storno.addActionListener(this);
		besteller.setSize(800,600);
		this.add(besteller);
		this.setSize(800,600);
		this.setVisible(false);
		
	
	}
	
	public void actionPerformed(ActionEvent peach) {

		
	
	for(int i=0; i<(buttons.length); i++) {
		
		String ProdID = null;
		String Price = null;
		
		if(peach.getSource()==storno){
			sum = 0.0;
			zwischensumme[i].setText("");
			a[i] = 0;
			rechner.toPay.setText("");
		}
	
		if(peach.getSource() == buttons[i]) {
			String name = buttons[i].getText();
			//System.out.println(buttons[i].getText());
	
			prods.executeQuery("SELECT preisID FROM artikel WHERE artikel_name ='"+name+"'");
			ProdID = ""+prods.getValueAt(0, 0);
			
			prods.executeQuery("SELECT Preis FROM Preise WHERE Preis_ID = '"+ProdID+"'");
			Price = ""+prods.getValueAt(0, 0);

			//System.out.println(Price);
		
			a[i]++;
			double myPrice = Double.parseDouble(Price);
			//System.out.println(Price);
			zwsum[i] = myPrice * a[i];
			zwsum[i] = Math.round(zwsum[i] * 100.)/100.;
			zwischensumme[i].setText(""+a[i]+"x"+name+": "+zwsum[i]+"€\n");
		}
	}
		

	if (peach.getSource() == pay) {
		//Zahlfenster			
		sum = Math.round(sum * 100.)/100.;
		
		sum = zwsum[0]+ zwsum[1]+ zwsum[2]+ zwsum[3]+ zwsum[4]+ zwsum[5]+
		zwsum[6]+ zwsum[7]+ zwsum[8]+ zwsum[9]+ zwsum[10]+ zwsum[11]+
		zwsum[12]+ zwsum[13]+ zwsum[14]+ zwsum[15]+ zwsum[16]+ zwsum[17];
		
				rechner.toPay.setText(sum+"");
				rechner.setVisible(true);
	}
	}

}
 

hdi

Top Contributor
Eine einfache Möglichkeit gibt es da imho nicht. Unter ButAlive's Aussage kann ich mir nicht viel vorstellen. Es hat zB nix mit irgendeinem MVC-Pattern zu tun, ob ein JToggleButton gerade gedrückt ist oder nicht, oder welche Größe und Position das Fenster gerade hat. Das zählt kaum zu irgendeinem gesonderten "Model" in der Applikation. Er meint da denke ich eher so Dinge wie die Einträge einer Liste etc. Aber die gesamte GUI, inklusive der Zustände von Buttons, dem Text innerhalb von Textfeldern usw zu "resetten" gibt es nicht out of the box.

Was du tun musst: Deine Initialisierung in eine zentrale Stelle auslagern, über die man das ganze jederzeit wieder anstoßen kann. Das bedeutet alle deine Zuweisungen, die du im Moment direkt bei der Deklaration der Variablen hast, in eine Methode "initialize()" oder so auslagern, die du später wieder aufrufen kannst. Dort setzt du dann zB auch explizit den Text jeder TextArea oder jedes TextFields auf einne leeren String. Das ist für die erste Initialisierung zwar nicht nötig, aber für das "Resetten".

Ist an sich aber eine ganz interessante Frage. Wenn man jetzt Lust hat kann man das sicherlich recht generisch aufziehen, mit Interfaces die deine Widgets dann implementieren usw. Wird aber wohl immer ein wenig ätzend bleiben. JE nach dem was du nun alles resetten willst.

edit: Ich hab mir deinen Code grad angesehen. In so einem einfachen Fall könntest du auch einfach das Frame disposen und ein neues erstellen und anzeigen. Ist zwar nicht grad elegant, aber du scheinst ja alle Daten in der Frame-Klasse zu speichern und auch alle verwerfen zu wollen. Wär zumindest die einfachste Lösung.
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
Frame Schließen und neustarten
Hallo Livo,

versuch's mal so:

Java:
package myapplication;

import java.io.*;
import java.util.logging.*;

public class Starter {

    private static String JARNAME = "MyApplication.jar";
    private static String MAINCLASS = "myapplication.MainGui";

    private Starter() {
    }

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

    public static void start() {
        String userdir = System.getProperty("user.dir");
        String classpath = "-cp \""
                //the non-jar path is used in case you start 
                //the application from your IDE project:
                + userdir + "\\build\\classes;"
                + userdir + "\\" + JARNAME + "\" ";
        String cmd = "javaw " + classpath + MAINCLASS;
        try {
            Runtime.getRuntime().exec(cmd);
        } catch (IOException ex) {
            Logger.getLogger(Starter.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Java:
package myapplication;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public final class MainGui {

    public static final int RESTART = 1;

    public MainGui() {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        frame.setLocationRelativeTo(null);
        JButton btRestart = new JButton("Frame Schließen und neustarten");
        btRestart.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                exit(RESTART);
            }
        });
        frame.add(btRestart, BorderLayout.PAGE_START);
        frame.setVisible(true);
    }

    public void exit(final int opt) {
        if (opt == RESTART) {
            Starter.start();
        }
        System.exit(0);
    }

    public static void main(final String[] args) {
        Runnable gui = new Runnable() {

            @Override
            public void run() {
                MainGui mainGui = new MainGui();
            }
        };
        //GUI must start on EventDispatchThread:
        EventQueue.invokeLater(gui);
    }
}

Gruß,
André
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
D Neues Frame öffnen - und dazu altes schließen AWT, Swing, JavaFX & SWT 5
M JWindow schließen wenn Frame sich ändert AWT, Swing, JavaFX & SWT 2
M Main Frame schließen und neue Klasse aufrufen? AWT, Swing, JavaFX & SWT 2
G ein AWT-Frame schließen . AWT, Swing, JavaFX & SWT 8
S Einzelne Frame Fenster schließen AWT, Swing, JavaFX & SWT 2
S Einzelne Frame Fenster schließen AWT, Swing, JavaFX & SWT 2
B Frame per Button schließen AWT, Swing, JavaFX & SWT 4
H Internal Frame mit Nachfrage schließen AWT, Swing, JavaFX & SWT 9
F Internes Frame RICHTIG schließen..geht das überhaupt ? AWT, Swing, JavaFX & SWT 2
Fragerjava Frame inhalt komplett löschen AWT, Swing, JavaFX & SWT 4
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
Kotelettklopfer Frame ändert Farbe nicht AWT, Swing, JavaFX & SWT 12
P Swing Zufallsbilder auf Frame ausgeben AWT, Swing, JavaFX & SWT 1
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
C Swing F5 Taste neu laden auf ganzen Frame AWT, Swing, JavaFX & SWT 9
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
H Swing Frame an andere Klassen weitergeben AWT, Swing, JavaFX & SWT 4
olfibits Swing JavaFX-Frame in JDesktopPane darstellen? AWT, Swing, JavaFX & SWT 2
F Swing Frame nach vorne holen AWT, Swing, JavaFX & SWT 2
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
S Tastatur frame nur nur 1 mal öffnen AWT, Swing, JavaFX & SWT 1
T Swing Java-Frame bei Programmstart NICHT im Vordergrund öffnen AWT, Swing, JavaFX & SWT 2
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
T Frame öffnet nicht AWT, Swing, JavaFX & SWT 1
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M Internal Frame in den vordergrund AWT, Swing, JavaFX & SWT 4
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
Tom299 JavaFX Ähnliche Komponente wie der VB6 Frame? AWT, Swing, JavaFX & SWT 2
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
D Buttons erscheinen nicht auf Frame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
B Frame hängt sich auf trotz invokeLater AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
M JavaFX wie kann mann sein frame mit einem Icon fersehen? AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
P Frame friert ein AWT, Swing, JavaFX & SWT 6
Z Frame mit Rechteck! AWT, Swing, JavaFX & SWT 16
Messoras JWindow/Frame durch das man durchklicken kann AWT, Swing, JavaFX & SWT 5
M Swing "Frame.setResizable(false);" verschiebt Content? AWT, Swing, JavaFX & SWT 9
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
J JTable aktuallisieren über anderen Frame AWT, Swing, JavaFX & SWT 6
J JTable Zeile anklicken und neues Frame öffnen AWT, Swing, JavaFX & SWT 4
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
B JFrame immer an gleicher stelle auf anderem Frame AWT, Swing, JavaFX & SWT 5
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
B Swing JMenuBar unten in der Frame setzen? AWT, Swing, JavaFX & SWT 15
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
D Buttons erscheinen nicht auf dem zweiten Frame AWT, Swing, JavaFX & SWT 4
X Swing Größe eines Fensters JFrame / Frame AWT, Swing, JavaFX & SWT 5
BRoll Frame- Video einbinden machbar? AWT, Swing, JavaFX & SWT 6
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
B Frame always on top nur auf anderem Frame AWT, Swing, JavaFX & SWT 9
S Aufteilung von JPanels in einem Frame AWT, Swing, JavaFX & SWT 13
K Options-Frame integrieren (zum zuschalten und wegschalten wie geht man da ran? AWT, Swing, JavaFX & SWT 7
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
N Swing Endlosschleife blockt Frame AWT, Swing, JavaFX & SWT 11
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
N Swing Frame ungewollt transparent! AWT, Swing, JavaFX & SWT 2
J Kleines Anzeige Problem(nur blanker Frame) AWT, Swing, JavaFX & SWT 22
Daniel_L Drop von Dateien auf Frame - welche Drop-Location? AWT, Swing, JavaFX & SWT 2
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
C LookAndFeel Frame updated nicht vollständig AWT, Swing, JavaFX & SWT 9
K 3D-Grafik Canvas ist ein eigener Frame?! AWT, Swing, JavaFX & SWT 13
L Jbutton + jcombobox mit vorhandenen frame verknüfen AWT, Swing, JavaFX & SWT 8
J 2 Bereiche im Frame komplett nutzen - Welchen Layoutmanager? AWT, Swing, JavaFX & SWT 3
Z Swing JTextfield auf Frame AWT, Swing, JavaFX & SWT 13
N Swing Frame mit GlassPane und Popup AWT, Swing, JavaFX & SWT 5
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
P Frame "always on top" und welche GUI? AWT, Swing, JavaFX & SWT 5
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
S JMenuBar Frame Abstand AWT, Swing, JavaFX & SWT 3
J Swing Frame öffnen aus Frame mit JButton AWT, Swing, JavaFX & SWT 2
X Alte Frame-Größe beim wiederholten Aufruf AWT, Swing, JavaFX & SWT 5
M erstes Frame wartet auf die Auswertung eines zweiten AWT, Swing, JavaFX & SWT 8
J Frame-Steuerelement AWT, Swing, JavaFX & SWT 2
L Swing Flackern in Frame bei erstem Klick AWT, Swing, JavaFX & SWT 19
F Hintergrundbild im Frame AWT, Swing, JavaFX & SWT 11
S Zeichnen führt zu transparentem Frame AWT, Swing, JavaFX & SWT 6
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
B Frame im Frame? AWT, Swing, JavaFX & SWT 4
C WindowListener Frame AWT, Swing, JavaFX & SWT 8
P klassenübergreifendes Frame AWT, Swing, JavaFX & SWT 6
B Text soll nich über das Frame hinausgehen AWT, Swing, JavaFX & SWT 5
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
Spin JFrame/ Frame Drag and Drop AWT, Swing, JavaFX & SWT 13
S Swing Panelgröße anpassen wenn Frame maximiert wird AWT, Swing, JavaFX & SWT 2
K MouseListener für Objekte auf einem Frame AWT, Swing, JavaFX & SWT 4
3 Eigenes Frame/Window programmieren AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben