split()-Methoden problem

So, jetzt werden die Vokabeln angezeigt. :) Aber ich möchte jetzt wenn ich auf den Button drücke, dass überprüft wird ob die eingegbene Vokabel vom jTextField2 mit dem array[1], übereinstimmt.

Wenn ja soll int r um 1 erhöht werden, (wenn nicht, dann soll gar nichts passieren), und dann soll die nächste Vokabel ausgegeben.

Ich habe gedacht es so zu lösen, aber es kommt nicht das raus, was ich möchte. :

Code:
final String vokabel = in.readLine();
		System.out.println(vokabel);
		final String[] array = vokabel.split("\\.");
		jTextField1.setText(array[0]);

		jButton2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				int r = 0;
				int f = 0;

				if (jTextField2.getText().equals(array[1])) {

					r++;

					System.out.println(r);
				}

				String vokabel = null;
				try {
					vokabel = in.readLine();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println(vokabel);
				String[] array = vokabel.split("\\.");
				jTextField1.setText(array[0]);
				jTextField2.setText(null);
			}

		});

PS: Das System.out.println() ist nur zur überprüfung gedacht. :)
 
Die Variablen r und f solltest du außerhalb der actionPerformed-Methode deklarieren. Im Moment werden die beiden Variablen immer wieder neu deklariert und immer wieder mit 0 initialisiert. Hier kommen also Themen wie Sichtbarkeit und Lebenszeit/-zyklus von Variablen vor.
 
Also wenn ich das so mache, wird r auch nicht erhöht. Die Ausgabe ist

hund.dog
1
Katze.cat
1
Maus.mouse
1
null
 
Code:
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Arrays;

import javax.swing.*;
import javax.swing.event.*;

/**
 * 
 * Beschreibung
 * 
 * @version 1.0 vom 06.09.2010
 * @author
 */

public class Vokabeltrainer extends JFrame {
	// Anfang Attribute
	private JTextField jTextField1 = new JTextField();
	private JTextField jTextField2 = new JTextField();
	private JButton jButton1 = new JButton();
	private JButton jButton2 = new JButton();
	private JLabel jLabel1 = new JLabel();
	private JLabel jLabel2 = new JLabel();
	int r = 0;
	int f = 0;
	public String[] array; 
	public String vokabel;

	// Ende Attribute

	public Vokabeltrainer(String title) throws Exception {
		// Frame-Initialisierung
		super(title);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		int frameWidth = 580;
		int frameHeight = 327;
		setSize(frameWidth, frameHeight);
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (d.width - getSize().width) / 2;
		int y = (d.height - getSize().height) / 2;
		setLocation(x, y);
		Container cp = getContentPane();
		cp.setLayout(null);
		// Anfang Komponenten
		final BufferedReader in = new BufferedReader(
				new InputStreamReader(
						new FileInputStream(
								new File(
										"C:\\Users\\Yanik\\workspace\\Vokabeltrainer\\src\\Vokabeln.txt")),
						// Charset.forName("ISO-8859-1")));
						Charset.forName("UTF-8")));
		jTextField1.setBounds(200, 64, 361, 24);
		jTextField1.setText("");
		cp.add(jTextField1);
		jTextField2.setBounds(200, 112, 361, 24);
		jTextField2.setText("");
		cp.add(jTextField2);
		jButton1.setBounds(416, 240, 145, 49);
		jButton1.setText("Abbrechen");
		jButton1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				jButton1_ActionPerformed(evt);
			}
		});
		cp.add(jButton1);
		jButton2.setBounds(256, 240, 145, 49);
		jButton2.setText("Weiter");
		 vokabel = in.readLine();
		System.out.println(vokabel);
		array = vokabel.split("\\.");
		jTextField1.setText(array[0]);

		jButton2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {

				if (jTextField2.getText().equals(array[1])) {

					r++;
					System.out.println("Hallo");

				}
				System.out.println(r);
				try {
					vokabel = in.readLine();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println(vokabel);
				
				jTextField1.setText(array[0]);
				jTextField2.setText(null);
			}

		});

		cp.add(jButton2);
		jLabel1.setBounds(24, 64, 149, 24);
		jLabel1.setText("Deutschvokabel");
		jLabel1.setFont(new Font("MS Sans Serif", Font.BOLD, 17));
		cp.add(jLabel1);
		jLabel2.setBounds(24, 112, 154, 24);
		jLabel2.setText("Englischvokabel");
		jLabel2.setFont(new Font("MS Sans Serif", Font.BOLD, 17));
		cp.add(jLabel2);
		// Ende Komponenten

		setResizable(false);
		setVisible(true);
	}

	// Anfang Methoden
	public void jButton1_ActionPerformed(ActionEvent evt) {
		System.exit(0);
	}

	public void jButton2_ActionPerformed(ActionEvent evt) throws Exception {

	}

	// Ende Methoden

	public static void main(String[] args) throws Exception {
		new Vokabeltrainer("Vokabeltrainer");
	}
}
 
Zuletzt bearbeitet:
Also das Erhöhen von r funktioniert bei mir, was aber nicht funktioniert ist das mit den Vokabeln. Es bleibt immer die erste Vokabel drin stehn, was irgendwie sinnfrei ist.

Ich habe es jetzt mal etwas korrigiert, so dass das mit den Vokabeln klappt, der Stream sauber geschlossen wird und ich habe mir erlaubt deinen Code etwas umzuformatieren, damit man besser erkennt, was nun wo ist und was zusammengehört und was nicht. Dennoch muss an dem Code noch viel getan werden, denn er ist nicht sonderlich schön von der Struktur her, z.B. könnten ruhig mehr Methoden rein. Zum einen wird die Lesbarkeit erhöht, zum anderen ist der Code dann dynamischer und vor allem kommen dann Redundanzen nicht mehr vor, wie z.B.
Java:
array = vokabel.split("\\.");
jTextField1.setText(array[0]);
jTextField2.setText(null);
Das kommt im Moment zwei mal vor, dafür wäre eine Methode wie setNextVocabular() oder sowas besser ^^ Aber das wirste mit der Zeit noch selber hinbekommen, wenn du mehr Erfahrung hast.

Hier erstmal der neue Code, der soweit funktioniert, wie er soll.
Java:
package de.tutorials.forum.hilfe.yax.vokabeltrainer;

import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

/**
 * Beschreibung
 * 
 * @version 1.0 vom 06.09.2010
 * @author
 */
public class Vokabeltrainer extends JFrame {
	private static final long	serialVersionUID	= 6156459486834845463L;
	public String[]				array;
	private int					f					= 0;
	private BufferedReader		in					= null;
	private JButton				jButton1			= new JButton();
	private JButton				jButton2			= new JButton();
	private JLabel				jLabel1				= new JLabel();
	private JLabel				jLabel2				= new JLabel();
	private JTextField			jTextField1			= new JTextField();
	private JTextField			jTextField2			= new JTextField();
	private int					r					= 0;
	public String				vokabel;

	public static void main(String[] args) throws Exception {
		new Vokabeltrainer("Vokabeltrainer");
	}

	public Vokabeltrainer(String title) throws Exception {
		// Frame-Initialisierung
		super(title);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		Container cp = getContentPane();
		cp.setLayout(null);

		// Anfang Komponenten
		// Testfelder
		jTextField1.setBounds(200, 64, 361, 24);
		jTextField1.setText("");
		cp.add(jTextField1);
		jTextField2.setBounds(200, 112, 361, 24);
		jTextField2.setText("");
		cp.add(jTextField2);

		// Buttons
		jButton1.setBounds(416, 240, 145, 49);
		jButton1.setText("Abbrechen");
		jButton1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent evt) {
				jButton1_ActionPerformed(evt);
			}
		});
		cp.add(jButton1);

		jButton2.setBounds(256, 240, 145, 49);
		jButton2.setText("Weiter");
		jButton2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent evt) {
				if(jTextField2.getText().equals(array[1])) {
					r++;
					System.out.println("Hallo");
				}
				System.out.println(r);

				try {
					vokabel = in.readLine();
				} catch(IOException e) {
					e.printStackTrace();
				}
				System.out.println(vokabel);

				if(vokabel != null) {
					array = vokabel.split("\\.");
					jTextField1.setText(array[0]);
					jTextField2.setText(null);
				}
			}

		});
		cp.add(jButton2);

		// Labels
		jLabel1.setBounds(24, 64, 149, 24);
		jLabel1.setText("Deutschvokabel");
		jLabel1.setFont(new Font("MS Sans Serif", Font.BOLD, 17));
		cp.add(jLabel1);
		jLabel2.setBounds(24, 112, 154, 24);
		jLabel2.setText("Englischvokabel");
		jLabel2.setFont(new Font("MS Sans Serif", Font.BOLD, 17));
		cp.add(jLabel2);
		// Ende Komponenten

		// Stream zur Vokabeldatei herstellen und dafür sorgen, dass beim
		// Programmende (bzw. beim Beenden der JVM) der Stream wieder sauber
		// geschlossen wird
		in = new BufferedReader(new InputStreamReader(new FileInputStream(
				new File("vokabeln.txt")), Charset.forName("UTF-8")));
		Runtime.getRuntime().addShutdownHook(new Thread() {
			@Override
			public void run() {
				if(in != null) {
					try {
						in.close();
					} catch(IOException e) {
						e.printStackTrace();
					}
				}
			}
		});

		// Vokabeln auslesen und erste Vokabel abfragen
		vokabel = in.readLine();
		System.out.println(vokabel);
		array = vokabel.split("\\.");
		jTextField1.setText(array[0]);

		// Fenstergröße zuweisen, mittig positionieren und sichtbar machen
		setSize(580, 327);
		setResizable(false);
		setLocationRelativeTo(null);
		setVisible(true);
	}

	// Anfang Methoden
	public void jButton1_ActionPerformed(ActionEvent evt) {
		System.exit(0);
	}

	public void jButton2_ActionPerformed(ActionEvent evt) throws Exception {

	}
	// Ende Methoden
}
PS: Wegen dem Package nicht wundern, hat organisatorische Gründe.
 
Zuletzt bearbeitet:
Zurück