Erste Schritte mit GUI - Fileverarbeitung, Listener,...

Syrghar

Mitglied
Bin gerade dabei mich mit dem Thema GUI das erste Mal zu beschäftigen.

Dabei ist der Anfang recht gut gelaufen, solange es um die Gestaltung ging.
Möchte ein Quiz machen, wo es oben in der GUI ein Menü gibt, um die Datei wählen zu können, in der die Fragen abgespeichert sind.
Darunter soll dann eine Frage mit den 4 Antwortmöglichkeiten zu sehen sein und darunter wiederrum 4 Antwort-Buttons.

Die GUI sieht nach dem Start der Applikation aktuell so aus:
Unbenannt.PNG

Auswahl der Datei ist auch möglich:
Unbenannt2.PNG

Stecke nun aber bei der Weiterverarbeitung des Files. Habe eine Klasse Quiz_Reader erstellt, in der ich das File in weitererfolge auslesen möchte. Nur habe ich keine Ahnung wie ich es bewerkstelligen kann, dass ich in der Klasse damit arbeiten kann.
Habe derzeit die Klasse Quiz_GUI, in der auch die Fileauswahl gemacht wird.

Java:
	private void GUI_Listeners()
	{
		//Open a dialog to choose a file
		this.menu1_file.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				JFileChooser chooser = new JFileChooser();
		      
		        int value = chooser.showOpenDialog(null);
		        
		        //check if file should be opened
		        if(value == JFileChooser.APPROVE_OPTION)
		        {
		        	File datei = chooser.getSelectedFile();
		        	System.out.println("Die zu öffnende Datei ist: " + datei);
		        	
		        	file = datei;
		        	
		        	System.out.println("Die zu öffnende Datei ist: " + file);
		        	
		        }
			}
		});
	}

Wie kann ich aber nun auf dieses File zugreifen?
 

Major_Sauce

Bekanntes Mitglied
Morgen,

ich schreibe das jetzt mal hier zusammen, könnten also ein paar Fehler sein, aber der Aufbau sollte stimmen:

Java:
		//Lesen
		BufferedReader fileReader = new BufferedReader(new FileReader(file));
		String currentLine = fileReader.readLine();
		while(currentLine != null){
			System.out.println("Zeile: " + currentLine);
			currentLine = fileReader.readLine()
		}
		
		//Schreiben
		PrintWriter fileWriter = new PrintWriter(file);
		fileWriter.println("Ich mag Kekse...");

mfg Major
 

Syrghar

Mitglied
Das File zu lesen ist kein Problem. Mache ich über folgende KLasse.

Java:
public class Quiz_Reader 
{
	
	public static String readFile( File file ) throws IOException 
	{
	    BufferedReader reader = new BufferedReader( new FileReader (file));
	    String         line = null;
	    StringBuilder  stringBuilder = new StringBuilder();
	    String         ls = System.getProperty("line.separator");

	    while( ( line = reader.readLine() ) != null ) {
	        stringBuilder.append( line );
	        stringBuilder.append( ls );
	    }
	    reader.close();
	    return stringBuilder.toString();
	}

Wo ich die Schwierigkeit hatte war, wie, nachdem das File über den File_Chooser ausgewählt wurde ich den Inhalt des Files dann nutzen/auslesen kann. Also, wie ich das in der GUI_Listener Klasse machen muss.
Das hier:
Java:
try 
		        	{
		        		String question = Quiz_Reader.readFile(file);
 
		        		System.out.println(question);
 
					} catch (IOException e1) 
					{
						e1.printStackTrace();
					}
Java:
private void GUI_Listeners()
	{
		//Open a dialog to choose a file
		this.menu1_file.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				JFileChooser chooser = new JFileChooser();
		      
		        int value = chooser.showOpenDialog(null);
		        
		        //check if file should be opened
		        if(value == JFileChooser.APPROVE_OPTION)
		        {
		        	File file = chooser.getSelectedFile();
		        	//System.out.println("Die zu öffnende Datei ist: " + file);
		        	
		        	try 
		        	{
		        		String question = Quiz_Reader.readFile(file);
		        		
		        		System.out.println(question);
		        		
					} catch (IOException e1) 
					{
						e1.printStackTrace();
					}
		        }
			}
		});
	}

Nun bin ich soweit, dass der Inhalt des Files auf der Kommandozeile ausgegeben wird, nachdem über den File_Chooser das File geöffnet wurde. Jetzt geht es darum den Inhalt bzw. einen Teil davon (die erste Frage) auf der GUI anzuzeigen.
 

franky27

Bekanntes Mitglied
Naja du legst dir ein Jlabel oder eine TextArea oä auf dein Panel und benutzt die setText Methode.
In Zukunft solltest du deine Probleme aber genauer beschreiben. Nutzen/Auslesen des Files hat imo nichts mit Anzeigen auf dem Frame zu tun, sondern beschreibt so ziemlich genau das, was dir zwei Leute beantwortet haben!?
 

Syrghar

Mitglied
Wie kann ich aber nun auf den Inhalt von "questions" in der Methode "GUI_Listeners" zugreifen?

Muss ich hier möglicherweise mit setter arbeiten? Egal was ich versuche und was ich dazu an möglichen Ansätzen gefunden habe, nichts klappt. Habe unterschiedliches versucht und konnte teilweise das Programm auch ausführen, jedoch wird mir in der GUI nichts angezeigt. Nehme ich einen einfachen Text funktioniert es.

Sorry, für das blöde Fragen. ABer ich steh ganz am Anfang und will was lernen.

EDIT: Generelle Verständnisfrage:
Wenn das Programm gestartet wird, wird die GUI gezeichnet. Wenn nun zu einem späteren Zeitpunkt eine String Variable erst gefüllt wird, die einen auszugebenden Text enthält, müsste das dann nicht neu ausgelesen werden, um in der GUI zu erscheinen?
Kann da mein Problem liegen?
 
Zuletzt bearbeitet:

franky27

Bekanntes Mitglied
Ich verstehe nicht so ganz dein Problem. Wie versuchst du denn aktuell den Text anzuzeigen? Nochmal: Deklariere dir ein leeres Jlabel als member variable und platziere das auf deinem Panel. Wenn du jetzt deinen question String hast, kannst du den im Jlabel anzeigen lassen:
Java:
meinLabel.setText(question);
Und genau das beantwortet auch den letzten Teil der Frage:
In der ActionPerformed Methode öffnest du dein File, liest es ein, speicherst den Text in deinem question String und updatest das JLabel mit dem Text. Das kannst du dann später auch wieder in eigene Methoden auslagern, ist aber jetzt ja erstmal egal.
 

Syrghar

Mitglied
Mein Problem war ein grundsätzliches Verständnisproblem. Für den Blödsinn könnt ich mir in den Hintern beißen.

Jetzt funktioniert`s. ;-)
 

Syrghar

Mitglied
Bin nun schon weiter mit dem Thema gekommen Hänge nun aber bei folgendem Problem, dass der Text nicht richtig angezeigt wird.

Unbenannt3.PNG

Habe dazu versucht die jPanel und jTextArea Größe anzupassen. Jedoch ohne Erfolg.
Panel:
Java:
this.container_question.setPreferredSize(new Dimension(0, 200));

Area:
Java:
Quiz_GUI.question_text.setMaximumSize(new Dimension(100, 500));
 

Enceladus271

Bekanntes Mitglied
Hast du Zeilenumbrüche in der TextArea aktivert?
Java:
jTextArea.setLineWrap( true ); // autom. Zeienumbrüche
jTextArea.setWrapStyleWord( true ); // bei Zeilenumbruch keine Wörter splitten
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing Erste Schritte mit der GUI, viele Probleme AWT, Swing, JavaFX & SWT 36
M Erstellen eines Hilfe-Fenster bzw"Erste-Schritte" AWT, Swing, JavaFX & SWT 2
S Erste Schritte mit SWING AWT, Swing, JavaFX & SWT 7
R Erste Schritte mit Swing AWT, Swing, JavaFX & SWT 3
H JTable - erste Schritte und Machbarkeitsüberlegung AWT, Swing, JavaFX & SWT 8
8 Installation von SWT und erste Schritte AWT, Swing, JavaFX & SWT 3
M JavaFX TableView nur erste Zeile editable machen und gelb markieren AWT, Swing, JavaFX & SWT 0
R javafx erste application AWT, Swing, JavaFX & SWT 12
L Die erste Grafikprogrammierung AWT, Swing, JavaFX & SWT 1
I Erste Desktop Software - blutiger Anfänger AWT, Swing, JavaFX & SWT 4
N JavaFX Erste Versuche mit Data-Binding AWT, Swing, JavaFX & SWT 11
Kenan89 Java FX GUI Hilfe für erste Java FX App AWT, Swing, JavaFX & SWT 8
J Das erste Projekt und ein Haufen von Fragen. Der SudokuReader. AWT, Swing, JavaFX & SWT 4
D Erste Knoten des JTrees bei Start offen AWT, Swing, JavaFX & SWT 8
P Erste Versuche einer Grafischen Oberfläche AWT, Swing, JavaFX & SWT 8
H JTree - nach Auswahl aus JFileChooser wird nur der erste Knoten angezeigt AWT, Swing, JavaFX & SWT 3
dl85hej meine erste Oberfläche AWT, Swing, JavaFX & SWT 3
E JTable nur die erste Spalte auswählbar? AWT, Swing, JavaFX & SWT 4
G JTable erste zeile fixieren wie in excel? AWT, Swing, JavaFX & SWT 3
B JTable erste Zeile aktiv AWT, Swing, JavaFX & SWT 6
L Erste Spalte eines JTables soll nicht editierbar sein. AWT, Swing, JavaFX & SWT 7
S Projekt: Meisterschaft - Abspeichern bereits gemachter Schritte AWT, Swing, JavaFX & SWT 2
F Schritte AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben