Java Immer neues Fenster, wenn Button clicked, warum?

XHotSniperX

Lt. Junior Grade
Registriert
Jan. 2008
Beiträge
472
Hallo

ich habe in nem kleinen Programm ein Problem. Immer wenn ich auf den Knopf klicke, erscheint ein neues Fenster und das häuft sich so an. Wieso ist das überhaupt so?

Das passiert aber z.B. dann nicht, wenn der Catch Block ausgeführt wird! Ich möchte einfach immer nur ein einziges Fenster haben und es sollte nur dann geschlossen werden, wenn man auf X klickt.

Wenn ihr den Code anschauen wollt, dann schaut einfach den anvisierten Teil an(Button) und ab da gehts weiter, dann seht ihr bestimmt warum.

Ausserdem werden zeichen wie "ö" nicht richtig angezeigt. Muss man da was spezielles machen?

Danke euch! :)

Code:
package Praxis;

import java.awt.BorderLayout;

public class PostleitzahlGui extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField textField;
	private JTextField textField_1;

	/**
	 * Launch the application.
	 */

	/**
	 * Create the frame.
	 */
	public PostleitzahlGui() {
		setTitle("Postleitzahl Gui");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		textField = new JTextField();
		textField.setFont(new Font("Arial", Font.PLAIN, 14));
		textField.setToolTipText("Gib eine Postleitzahl ein!");
		textField.setEditable(false);
		contentPane.add(textField, BorderLayout.CENTER);
		textField.setColumns(10);
		
		JButton btnSuchen = new JButton("Suchen!");         [COLOR="Red"]//HIEEEER[/COLOR]
		btnSuchen.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				PostleitzahlGuiSource.eingabe();
			}
		});
		contentPane.add(btnSuchen, BorderLayout.SOUTH);
		
		textField_1 = new JTextField();
		textField_1.setToolTipText("Gib bitte eine Postleitzahl ein!");
		contentPane.add(textField_1, BorderLayout.NORTH);
		textField_1.setColumns(10);
	}
	
	public void setText(String text){
		textField.setText(text);
	}
	
	public String getText(){
		String x = textField_1.getText();
		return x;
	}

}

Code:
package Praxis;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.HashMap;

public class PostleitzahlGuiSource {
	
	final String filename = "plz.txt";
	static PostleitzahlGui frame;
	HashMap<Integer, String> plzBook;
	
	PostleitzahlGuiSource(){
		plzBook = new HashMap<Integer, String>();

		try {
			frame = new PostleitzahlGui();
			frame.setVisible(true);
			frame.setText("Jou motherfucker enter your postal Code and I will search!\n");
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
		
		try {
			Scanner scanner = new Scanner( new File(filename) ).useDelimiter( "\t" ); 
			while ( scanner.hasNextLine() ) {
				int plz;
				String ort;
				scanner.next();
				scanner.next();
				plz = Integer.parseInt(scanner.next());
				scanner.next();
				ort = (" " +scanner.next());
				scanner.nextLine();
				plzBook.put(plz, ort);
			}
		}
		catch (FileNotFoundException e) {
			frame.setText("Error: " + filename + " not found. Das Programm wird in 5 Sekunden beendet!\n");
			try {
				Thread.sleep(5000);
			} 
			catch (InterruptedException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			System.exit(-1);
		}
	}
	
	static void eingabe(){
		try{
			String input = frame.getText();
			if(input.equals("q") || input.equals("Q")){
				System.out.println("Schönen Tag noch!");
				System.exit(-1);
			}
			else{
				int zahl = Integer.parseInt(input);
				PostleitzahlGuiSource buch = new PostleitzahlGuiSource();
				if(buch.plzBook.containsKey(zahl)){
					frame.setText("Diese PLZ gehört: " +buch.plzBook.get(zahl) +"\n");
				}
				else
					frame.setText("Sowas gibts nicht!\n");
			}
		}
		catch(NumberFormatException e){
			frame.setText("HAHAHAHAHAHAHA funny now try again!\n");
			
		}
	}
	
	public static void main(String[] args) {
		new PostleitzahlGuiSource();
	}
}
 
Naja, wenn du in der Methode eingabe() immer ein neues JFrame erzeugst, und genau diese Methode beim Click auf den Button ausführst, ist es doch klar, dass du immer mehr Fenster bekommst, oder?

Click -> Eingabe -> PostleitzahlGui() -> JFrame
 
Mach aus
Code:
frame = new PostleitzahlGui();
Code:
if (frame == null)
  frame = new PostleitzahlGui();
 
Uuups. thank you
Ergänzung ()

Ach und noch ne andere Frage:

Wie kann man eigentlich mit dem Writer (oder sonst was) in eine Datei schreiben OHNE den Rest zu löschen. Also in eine vorhandene Textdatei einfach ganz unten noch ne Zeile hinzufügen und den Rest stehen lassen. Geht das überhaupt?
 
Bei dem FileWriter z.B. kannst im Konstruktor angeben, ob du überschreiben oder anfügen möchtest.
 
tip top das hat super geklappt, ich danke diiir.. meine letzte Frage. Ich habe ein Menü gemacht aber wenn ich drauf klicke passiert einfach nix obwohl ich was geschrieben hab, dass es passieren soll:

Gui Menüeintrag:

Code:
mnNiggaaa.add(mntmSpeichern);
		mntmAddPlz = new JMenuItem("Add PLZ");
		mntmAddPlz.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				PostleitzahlGuiSource.einfuegen();
			}
		});

Und Click Aktion (die einfuegen Methode):
Code:
static void einfuegen(){
		FileWriter writer = null;
		try {
			writer = new FileWriter(filename, true);
			Scanner scanner = new Scanner( frame.getText() ).useDelimiter( " " );
			int zahl = scanner.nextInt();
			String input = scanner.next();
			PostleitzahlGuiSource buch = new PostleitzahlGuiSource();
			if(buch.plzBook.containsKey(zahl) || buch.plzBook.containsValue(input)){
				frame.setText("Diesen Ort gibt es bereits!\n");
			}
			else{
				frame.setText("Wird eingefügt!\n");
				writer.append("platzhalter" +"\t" +"platzhalter" +"\t" +zahl +"\t" +"platzhalter" +"\t" +input +"\n");
				writer.close();
				new PostleitzahlGuiSource();
			}	
		}
		catch(NumberFormatException e){
			frame.setText("HAHAHAHAHAHAHA funny now try again!\n");
		}
		catch (FileNotFoundException e) {
			frame.setText("Error: " + filename + " not found. Das Programm wird in 5 Sekunden beendet!\n");
		}
		catch (IOException e) {
			frame.setText("Error in opening output file");
			System.exit(-1);
		}
		catch(NoSuchElementException e){
			frame.setText("Error: Es wurde ein Fehler verursacht! (NoSuchElement)");
		}
	}

Wieso geht das beim Knopf wunderbar aber beim Menüeintrag nicht?
 
dankeee :)
 
Zurück
Oben