Kleiner Vokabeltrainier

Status
Nicht offen für weitere Antworten.

marian04

Aktives Mitglied
Hallo Jungs,
da mir so super gut geholfen wurde, nochmal eine Frage an euch.
Habe, aus langeweile, folgenden Vokabeltrainier programmiert, jetzt würde ich gerne vllt noch so eine Checkbox machen, dass mal unterschiedliche "Kapitel" machen kann, nur leider hab ich keine Ahnung wie das geht !

Hab schon einiges im Forum gelesen bin daraus aber leider nicht schlau geworden:( Für andere Verbesserungsvorschläge bin ich auch zu haben, das Layout ist noch nicht so schön ich weiß ^^


Code:
 import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Random;


 public class Vokabel extends JFrame{

 JButton btn1 = new JButton ("Nächste");
 JButton btn2 = new JButton ("Kontrolle");
 JLabel lbl1 = new JLabel();
 JLabel lbl2 = new JLabel();
 JLabel lbl3 = new JLabel();
 JLabel lbl4 = new JLabel();
 JTextField txteng = new JTextField();
 String antworteng ;
 String loesungde ;
 
 //java.util.Random RGen = new java.util.Random();


  java.util.Random RGen = new java.util.Random();
  int random(int max){
  int i = Math.abs(RGen.nextInt());
  return i % max;

        }

 //int zufallszahl=2;
 int x=0;





                     //nextButton
  ActionListener A1=new ActionListener(){

   public void actionPerformed(ActionEvent e){

   //int zufallszahls=zufallszahl++;
     x = RGen.nextInt(10);
     lese_DateiEN();
     lese_Dateide();
     getContentPane().remove(lbl2);
     lbl3.setText("");
     lbl4.setText("");

   }

   };                    //Kontrolle
  ActionListener A2=new ActionListener(){

   public void actionPerformed(ActionEvent e){

   int x;
   
       antworteng=txteng.getText();
       loesungde=lbl2.getText();


   if (loesungde.equalsIgnoreCase(antworteng)){

   lbl3.setText("richtig");
   lbl4.setText("");
    }
   else{
     lbl3.setText("Leider Falsch!:(") ;
     lbl4.setText("Lösung: "+loesungde);
    }


   }
  };
 
  public  Vokabel ()
  {
   getContentPane().setLayout(null);
   lbl1.setBounds(15,160,60,50);
   getContentPane().add(lbl1);
  
   lbl2.setBounds(360,360,1,1);
   getContentPane().add(lbl2);

   lbl3.setBounds(130,160,100,50);
   getContentPane().add(lbl3);

   lbl4.setBounds(230,160,100,50);
   getContentPane().add(lbl4);

  
    btn1.setBounds (15,210,110,50);
    btn1.addActionListener(A1);
    getContentPane().add(btn1);
    
    btn2.setBounds (130,210,110,50);
    btn2.addActionListener(A2);
    getContentPane().add(btn2);
    
    txteng.setBounds (10,110,60,30);
    getContentPane().add(txteng);
   }

public void lese_DateiEN(){
       BufferedReader f;
   String line;

     try {
      f = new BufferedReader(
           new FileReader("english.txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl1.setText(line);
         
       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }

   public void lese_Dateide(){
       BufferedReader f;
   String line;

     try {
      f = new BufferedReader(
           new FileReader("deutsch.txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl2.setText(line);
         

       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }
   public static void main(String[] args)
   {

        JFrame MyFrame = new Vokabel ();
        MyFrame.setSize(400,400);
        MyFrame.setVisible(true);
    }
 }


mfg marian
 

paldawin

Mitglied
Code:
Vector<String> kapitel = new Vector<String>();
kapitel.add("Kapitel 1");
kapitel.add("Kapitel 2");
...

JCheckBox checkBox = new JCheckBox(kapitel);
 

marian04

Aktives Mitglied
Wenn ich das so übernehme kommt :

Code:
Compiliere C:\java_pc\vokabeltrain\Vokabel.java mit Java-Compiler
Vokabel.java:23:14: <identifier> expected
  kapitel.add("Kapitel 1");

Zweimal, logischerweise, tritt dieser Fehler auf.

Muss man dann noch einen Listener hinzufügen, der drauf achtet welches angeklickt wird ?

mfg
 
Zuletzt bearbeitet:

marian04

Aktives Mitglied
Hey,

weiß keiner mehr was ? Schandro vllt hab gesehen du hast selbst doch mal einen Vokabeltrainier programmiert ?!

Weil iwie bekomm ich das so net zum laufen ?

Sind übrigens keine Hausaufgaben bevor da einer auf die Idee kommt !


Mfg marian
 

hdi

Top Contributor
Zeig mal den Code. Du hast das wahrscheinlich irgendwo eingebaut wo es nicht
hingehört, zB mitten in die Klasse oder sowas.
 

marian04

Aktives Mitglied
Hey,

ich hab den Teil in dem aus vorkommt mal rauskopiert!

Code:
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Random;


 public class Vokabel extends JFrame{

 JButton btn1 = new JButton ("Nächste");
 JButton btn2 = new JButton ("Kontrolle");
 JLabel lbl1 = new JLabel();
 JLabel lbl2 = new JLabel();
 JLabel lbl3 = new JLabel();
 JLabel lbl4 = new JLabel();
[B]
 JCheckBox checkBox = new JCheckBox(kapitel);[/B]

 JTextField txteng = new JTextField();
 String antworteng ;
 String loesungde ;
 
[B] Vector<String> kapitel = new Vector<String>();
  kapitel.add("Kapitel 1");
  kapitel.add("Kapitel 2");[/B]

 
 //java.util.Random RGen = new java.util.Random();


  java.util.Random RGen = new java.util.Random();
  int random(int max){
  int i = Math.abs(RGen.nextInt());
  return i % max;

        }

 //int zufallszahl=2;
 int x=0;





                     //nextButton
  ActionListener A1=new ActionListener(){

   public void actionPerformed(ActionEvent e){

   //int zufallszahls=zufallszahl++;
     x = RGen.nextInt(10);
     lese_DateiEN();
     lese_Dateide();
     getContentPane().remove(lbl2);
     lbl3.setText("");
     lbl4.setText("");

   }

   };                    //Kontrolle
  ActionListener A2=new ActionListener(){

   public void actionPerformed(ActionEvent e){

   int x;
   
       antworteng=txteng.getText();
       loesungde=lbl2.getText();


   if (loesungde.equalsIgnoreCase(antworteng)){

   lbl3.setText("richtig");
   lbl4.setText("");
    }
   else{
     lbl3.setText("Leider Falsch!:(") ;
     lbl4.setText("Lösung: "+loesungde);
    }


   }
  };
//hier kommt noch public vokabel usw


Ich Danke euch für eure Hilfe !Ihr seid die besten !


Mfg
 

hdi

Top Contributor
Jo wie ich dachte: Deine Klasse lässt sich ja nicht mal kompilieren.
Methoden-/Konstruktor Aufrufe oder nicht-sofortige Zuweisungen dürfen nicht
mitten in der Klasse stehen, sondern in Methoden/Konstruktoren:

Code:
 public class Vokabel extends JFrame{

 JButton btn1 = new JButton ("Nächste");   //ok
 JButton btn2 = new JButton ("Kontrolle");  //ok
 JLabel lbl1 = new JLabel();                      //ok
 JLabel lbl2 = new JLabel();                      //ok
 JLabel lbl3 = new JLabel();                      //ok
 JLabel lbl4 = new JLabel();                      //ok

// FEHLER: "kapitel" wird erst weiter unten erstellt:
 JCheckBox checkBox = new JCheckBox(kapitel);  

 JTextField txteng = new JTextField();  //ok
 String antworteng ; //ok
 String loesungde ;   //ok
 
 Vector<String> kapitel = new Vector<String>();  //ok
  kapitel.add("Kapitel 1"); // FEHLER: Das ist ein Methoden-Aufruf
  kapitel.add("Kapitel 2"); // FEHLER: Das ist ein Methoden-Aufruf

Also: Das Adden von den Kapiteln muss in einer Methode geschehen, oder
im Konstruktor. Letzteres ist hier sinnvoller.
Und auch dort im Konstruktor musst du die checkBox initialisieren, danach:

Code:
kapitel.add("kapitel1");
checkBox = new JCheckBox(kapitel);
 

marian04

Aktives Mitglied
Hey hdi, danke das du mir hilfst, aber leider taucht ein neues Problem auf, iwie bekomm ich das mit dieser Checkbox nicht auf die Reihe , raff das in meinem Javabuch schon nicht :(

Code:
 Compiliere C:\java_pc\vokabeltrain\Vokabel.java mit Java-Compiler
Vokabel.java:119:5: cannot find symbol
symbol  : class checkBox
location: class Vokabel
    checkBox ch1 = new JCheckBox(kapitel);
    ^
Vokabel.java:119:20: cannot find symbol
symbol  : constructor JCheckBox(java.util.Vector<java.lang.String>)
location: class javax.swing.JCheckBox
    checkBox ch1 = new JCheckBox(kapitel);
                   ^

[B] oder [/B]



Vokabel.java:119:5: cannot find symbol
symbol  : variable checkBox
location: class Vokabel
    checkBox  = new JCheckBox(kapitel);   /// Hier ensteht ein Fehler :(
    ^
Vokabel.java:119:17: cannot find symbol
symbol  : constructor JCheckBox(java.util.Vector<java.lang.String>)
location: class javax.swing.JCheckBox
    checkBox  = new JCheckBox(kapitel);   /// Hier ensteht ein Fehler :(
                ^


Und so sieht das jetzt im Quelltext aus :

Code:
public  Vokabel ()
  {
   getContentPane().setLayout(null);
   lbl1.setBounds(15,160,60,50);
   getContentPane().add(lbl1);
  
   lbl2.setBounds(360,360,1,1);
   getContentPane().add(lbl2);

   lbl3.setBounds(130,160,100,50);
   getContentPane().add(lbl3);

   lbl4.setBounds(230,160,100,50);
   getContentPane().add(lbl4);

  
    btn1.setBounds (15,210,110,50);
    btn1.addActionListener(A1);
    getContentPane().add(btn1);
    
    btn2.setBounds (130,210,110,50);
    btn2.addActionListener(A2);
    getContentPane().add(btn2);
    
    txteng.setBounds (10,110,60,30);
    getContentPane().add(txteng);
    
     kapitel.add("Kapitel 1");
     kapitel.add("Kapitel 2");

    checkBox  = new JCheckBox(kapitel);   /// Hier ensteht ein Fehler :(
   }



Tut mir leid wenn ich mich dumm anstelle, aber ich bemühe mich wirklich.
Wenn dir das zu aufwendig ist immer hier zu schreiben kannst du mich auch gerne im icq aufnehmen ! 222838700


Mfg Marian
 

hdi

Top Contributor
Nein du sollst im Konstruktor die checkBox nur initialisieren.
Natürlich musst du weiterhin diese Variable definieren in der Klasse.
Also einfach deine Zeile, die du vorhin hattest:

Code:
JCheckBox checkBox = new JCheckBox(kaptitel);

abändern in:

Code:
JCheckBox checkBox;

...und eben nur initialisieren (d.h. eben = new...) im Konstruktor.

PS: "cannot find symbol" heisst eben, dass er die Variable nicht kennt. Das heisst
sie wird nirgendswo definiert.
 

marian04

Aktives Mitglied
Hey,

Code:
public  Vokabel ()
  {
   getContentPane().setLayout(null);
   lbl1.setBounds(15,160,60,50);
   getContentPane().add(lbl1);
  
   lbl2.setBounds(360,360,1,1);
   getContentPane().add(lbl2);

   lbl3.setBounds(130,160,100,50);
   getContentPane().add(lbl3);

   lbl4.setBounds(230,160,100,50);
   getContentPane().add(lbl4);

  
    btn1.setBounds (15,210,110,50);
    btn1.addActionListener(A1);
    getContentPane().add(btn1);
    
    btn2.setBounds (130,210,110,50);
    btn2.addActionListener(A2);
    getContentPane().add(btn2);
    
    txteng.setBounds (10,110,60,30);
    getContentPane().add(txteng);

    checkBox1.setBounds (150,300,100,100);
    getContentPane().add(checkBox1);
    
    checkBox2.setBounds (150,400,100,100);
    getContentPane().add(checkBox2);
    
     kapitel.add("Kapitel 1");
     kapitel.add("Kapitel 2");
     
     JCheckBox checkBox1;
     JCheckBox checkBox2;
     
   }

Funzt 1A danke :) nur wofür ist denn jetzt dieses kapitel gut ?
Ist auch alles zu sehen.

Jetzt muss ich dieser Checkbox doch sicher noch nen Listener hinzufügen oder ? Reicht da ein ActionListener oder muss da etwas anderes zum Einsatz kommen ?

Also, nur um das du mich vllt besser verstehst, ich möchte, dass wenn jmd Kapitel 1 anklickt halt eine andere Datei ausgelsen wird, als wenn er Kapitel 2 anklickt ?!

Geht das überhaupt ?


Mfg
 

hdi

Top Contributor
Geht das überhaupt ?
NIEMALS! :eek:

:rolleyes: ...nein also natürlich geht das. Du brauchst einen ItemListener.
Am leichtesten ist es, wenn du die Dateien, in denen dann der Content ist, genauso
nennst wie die Anzeige in der Checkbox. So kannst du das dynamisch einlesen ohne
gross if-Abfragen:

Code:
itemStateChanged(ItemEvent e) {
      String eintragName = e.getItem().toString();
      if(eintragName != null && !eintragName.isEmpty()){
             ladeDatei("C:/MeineVokabelFiles/" + eintragName + ".txt");
      }
}
 

marian04

Aktives Mitglied
Hey

Mal wieder Fehler er sagt er findet eine Variable nicht aber welche denn ? Habe doch oben "String eintragName ;" hinzugefügt
Code:
Vokabel.java:92:45: cannot find symbol
symbol  : method isEmpty()
location: class java.lang.String
      if(eintragName != null && !eintragName.isEmpty()){
                                            ^
Vokabel.java:93:14: ladeDatei() in Vokabel cannot be applied to (java.lang.String)
             ladeDatei("C:/MeineVokabelFiles/" + eintragName + ".txt");
             ^
2 errors

Hier mal der gesammte Quelltext:


Code:
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Random;


 public class Vokabel extends JFrame{

 JButton btn1 = new JButton ("Nächste");
 JButton btn2 = new JButton ("Kontrolle");
 JLabel lbl1 = new JLabel();
 JLabel lbl2 = new JLabel();
 JLabel lbl3 = new JLabel();
 JLabel lbl4 = new JLabel();
 JCheckBox checkBox1 = new JCheckBox("Kapitel1");
 JCheckBox checkBox2 = new JCheckBox("Kapitel2");



 JTextField txteng = new JTextField();
 String antworteng ;
 String loesungde ;
[B] String eintragName ;[/B]
 
 Vector<String> kapitel = new Vector<String>();

 



  java.util.Random RGen = new java.util.Random();
  int random(int max){
  int i = Math.abs(RGen.nextInt());
  return i % max;

        }


 int x=0;





                     //nextButton
  ActionListener A1=new ActionListener(){

   public void actionPerformed(ActionEvent e){

   //int zufallszahls=zufallszahl++;
     x = RGen.nextInt(10);
     lese_DateiEN();
     lese_Dateide();
     getContentPane().remove(lbl2);
     lbl3.setText("");
     lbl4.setText("");

   }

   };                    //Kontrolle
  ActionListener A2=new ActionListener(){

   public void actionPerformed(ActionEvent e){

   int x;
   
       antworteng=txteng.getText();
       loesungde=lbl2.getText();


   if (loesungde.equalsIgnoreCase(antworteng)){

   lbl3.setText("richtig");
   lbl4.setText("");
    }
   else{
     lbl3.setText("Leider Falsch!:(") ;
     lbl4.setText("Lösung: "+loesungde);
    }


   }
  };
   [B]ItemListener I1 = new ItemListener(){


  
  public void itemStateChanged(ItemEvent e) {
      String eintragName = e.getItem().toString();
      if(eintragName != null && !eintragName.isEmpty()){
             ladeDatei("C:/MeineVokabelFiles/" + eintragName + ".txt");
      }
     }
       };[/B]

 
 
 
 
  public  Vokabel ()
  {
   getContentPane().setLayout(null);
   lbl1.setBounds(15,160,60,50);
   getContentPane().add(lbl1);
  
   lbl2.setBounds(360,360,1,1);
   getContentPane().add(lbl2);

   lbl3.setBounds(130,160,100,50);
   getContentPane().add(lbl3);

   lbl4.setBounds(230,160,100,50);
   getContentPane().add(lbl4);

  
    btn1.setBounds (15,210,110,50);
    btn1.addActionListener(A1);
    getContentPane().add(btn1);
    
    btn2.setBounds (130,210,110,50);
    btn2.addActionListener(A2);
    getContentPane().add(btn2);
    
    txteng.setBounds (10,110,60,30);
    getContentPane().add(txteng);

    checkBox1.setBounds (150,300,100,100);
    getContentPane().add(checkBox1);
    
    [B]checkBox2.setBounds (150,400,100,100);
    getContentPane().add(checkBox2);
    checkBox1.addItemListener(I1);
    [/B]
     kapitel.add("Kapitel 1");
     kapitel.add("Kapitel 2");
     
     JCheckBox checkBox1;
     JCheckBox checkBox2;
     
   }

public void lese_DateiEN(){
       BufferedReader f;
   String line;

     try {
      f = new BufferedReader(
           new FileReader("english.txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl1.setText(line);
         
       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }

   public void lese_Dateide(){
       BufferedReader f;
   String line;

     try {
      f = new BufferedReader(
           new FileReader("deutsch.txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl2.setText(line);
         

       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }
   
   
   [B]public void ladeDatei(){[/B]
       BufferedReader f;
   String line;

     try {
      f = new BufferedReader(
           new FileReader(eintragName+".txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl2.setText(line);


       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }
   

 
   public static void main(String[] args)
   {

        JFrame MyFrame = new Vokabel ();
        MyFrame.setSize(600,800);
        MyFrame.setVisible(true);
    }
 }

Also ich habe aus deinem ladeDatei einfach mal einen Bufferreader gemacht, dachte das soll so sein.. ?!


mfg
 

hdi

Top Contributor
EDIT: Ok du kommst grad komplett durcheinander...
Die Antwort könnte etwas dauern, stay tuned ;)
 

Fu3L

Top Contributor
Während du auf hdi's nächste Antwort wartest, hier nebenebei nochma etwas was mir aufgefallen ist:

Kommentare sind sehr, sehr nützlich und eigentlich unverzichtbar. Das hilft nicht nur uns, wenn wir dir helfen, sondern auch dir, wenn du mal 2 Wochen Pause machst, weil du sonst vllt nichtmehr weißt, wofür alles da ist...

und dashier:

[HIGHLIGHT="Java"] public Vokabel ()
{
//hier alles was hier so steht...

JCheckBox checkBox1;
JCheckBox checkBox2;

} //Hier Methodenende[/HIGHLIGHT]

bringt relativ wenig. Da werden zwei lokale Variablen angelegt, die die Membervariablen der Klase überlagern und dann am Methodenende werden die vom gc schon wieder eingesammelt und weggeschmissen, die können also raus. (Da hast du hdi glaub ich falsch verstanden)
 

hdi

Top Contributor
So, also ich hab jetzt mal ein kleines Bsp gemacht (unvollständig).
Du kannst das aber kopieren in eine Klasse "VokabelTrainer" und starten.

Code:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class VokabelTrainer extends JFrame {

	// Member-Variablen macht man alle private!
	private JLabel kapitelAuswahlLabel;
	private JComboBox kapitelAuswahl;
	private Vector<String> kapitel;

	// ...was du sonst noch so haben möchtest

	public VokabelTrainer() {

		// Kapitel-Liste befüllen
		kapitel = new Vector<String>();
		for (int i = 0; i < 5; i++) {
			kapitel.add("Kapitel" + (i + 1));
		}

		// JComboBox -- JCheckBox ist dafür ja total doof, hatte ich verplant
		kapitelAuswahl = new JComboBox(kapitel);
		/*
		 * Ein ActionListener ist hier doch besser, weil ein ItemListener
		 * reagiert 2x beim Klick, und das wollen wir ja nicht. (Würde zwei
		 * verschiedene Kapitel laden...)
		 */
		kapitelAuswahl.addActionListener(new KapitelListener());

		// Kleines Label
		kapitelAuswahlLabel = new JLabel("Kapitel wählen");

		// Wie gesagt: Lies dir etwas zu Layout-Managern durch um das zu
		// verstehen... Dann kannst du auch weitere Komponenten einfügen.
		// das "FlowLayout" setzt alle Elemente nebeneinander, von links nach
		// rechts.
		setLayout(new FlowLayout());
		add(kapitelAuswahlLabel);
		add(kapitelAuswahl);
		pack();

		// sollte man immer machen bei JFrames, damit sich das Programm gescheit
		// beendet beim Schliessen vom Fenster:
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	/*
	 * das hier ist eine innere Klasse, kannst du aber auch in eine eigene .java
	 * Datei reinschreiben...
	 */

	class KapitelListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			String kapitelName = kapitelAuswahl.getSelectedItem().toString();
			// Eigentlich nicht nötig, aber sicher ist sicher:
			if (kapitelName != null && !kapitelName.isEmpty()) {
				/* Diese Methode muss es logischerweise auch irgendwo geben.... */
				ladeDatei(kapitelName);
			}
		}

		private void ladeDatei(String kapitelName) {

			System.out.println("Es soll die Datei C:/whatever/" + kapitelName
					+ ".txt geladen werden.");
			/*
			 * du hast hier jetzt einen String, sowas wie "Kapitel1". Wie auch
			 * immer du das jetzt tun willst, du kannst eben diese Info nutzen
			 * um dann eine Datei einzulesen. Bennennen solltest du die Dateien
			 * halt dann eben so, dass irgendwo diese Bezeichnung der
			 * Kapitel-Liste drin ist.
			 */
		}

	}

	public static void main(String[] notUsed) {
		new VokabelTrainer().setVisible(true);
	}

}

... wie genau du die Dateien lädst, usw das musst du halt jetzt machen.
Wichtig ist dass du die Absicht hinter dem Listener und dieser ladeDatei()-MEthode
verstehst.

EDIT: und was vom meinem Vorredner angesprochen wurde: Du scheinst dir nicht so
wirklich im Klaren darüber zu sein, wo was hinkommt und wieso. Du solltest mal dringend in die FAQ
reinkucken, und dir Einträge über zB Methoden durchlesen, oder über Klassen, oder über Member-Variablen,
oder Konstruktoren, oder... so ziemlich alles ;)
 
Zuletzt bearbeitet:

marian04

Aktives Mitglied
Code:
f (kapitelName != null && !kapitelName.isEmpty())

Hier tritt wieder der Fehler auf, dass er das symbol nicht findet, obwohl ich oben stehen habe :

Code:
private String kapitelName ;



Oh man .. wie verpeilt kann ich sein ?! :(


mfg



Edit :

Ja muss ich wohl nochmal tun !! Habt ihr einen guten Tipp ?
 

hdi

Top Contributor
Siehst du in meinem Code irgendwo ein Attribut String kapitelName; ?
Was meinst du mit "oben"? Es muss dahin, wo ich es stehen habe, nicht oben in die Klasse.
Das ist nur eine lokale Variable,

Ich seh grad die FAQ ist down, da sind die Links wohl noch nich auf dem neuen Server
bzw. zeigen in die Leere.

Gib bei Google mal ein "Java Member-Variable" und "Java lokale Variable"

PS: Ich hoffe du hast die Methode "ladeDatei()" nicht ernsthaft in "f()" benannt.
Wenn ja, werd ich sauer ;) Das wurde doch grad angesprochen, dass man sinnvolle
Namen verwenden sollte ;)
 
Zuletzt bearbeitet:

marian04

Aktives Mitglied
Nein das mit dem f war der alte Quelltext sry.

Und hier .
Code:
 @Override
		public void actionPerformed(ActionEvent e) {
			String kapitelName = kapitelAuswahl.getSelectedItem().toString();
			// Eigentlich nicht nötig, aber sicher ist sicher:
			if (kapitelName != null && !kapitelName.isEmpty()) {
				/* Diese Methode muss es logischerweise auch irgendwo geben.... */
				ladeDatei(kapitelName);
			}

benutzt du doch die Lokale Variable String kapitelName und wenn ich das Programm versuche so zu starten kommt ein Fehler :

Code:
VokabelTrainer.java:64:46: cannot find symbol
symbol  : method isEmpty()
location: class java.lang.String
      if (kapitelName != null && !kapitelName.isEmpty()) {
                                             ^
1 error


Denkt ihr , das Buch : "Java ist auch eine Insel" wäre gut zum lernen ? Oder habt ich vllt eine andere Buchempfehlung ?


Mfg
 
Zuletzt bearbeitet:

hdi

Top Contributor
Hm...

Code:
import java.lang.*;

ganz oben in die Klasse reinklatschen. Aber eigentlich ist das doch gar nicht nötig...

Die Java-Insel ist schon ein sehr gutes Buch, zumindest die Basics sind dort ganz nett
erklärt, also ca. die ersten zehn Kapitel.

Pass aber auf, dass du die neueste Auflage erwischt:

http://openbook.galileocomputing.de/javainsel8/
 

marian04

Aktives Mitglied
Also auch wenn ich das Importiere hab ich den gleichen Fehler immernoch :(

Ja, das Buch hatte ich mir schonmal gekauft, mich aber immer mit so kleinen Texten im Internet durchgeschlagen, hab Version 6 ist das auch noch in Ordnung ?

Vllt ein anderes Buch, sowas für dummies , weil Heute stell ich mich echt sau-dumm an?


Mfg
 

Fu3L

Top Contributor
Vllt ein anderes Buch, sowas für dummies , weil Heute stell ich mich echt sau-dumm an?

Wenn du das Buch wirklich von Anfang an bis zu einem gewissen Punkt durcharbeitest, wirst du das bestimmt verstehen. Man muss halt etwas Zeit investieren um die Grundlagen zu lernen, bevor man Programmieren kann...

Die Insle sollte wohl geeignet sein, auch wenn ich bis jezz immer nur Auszüge daraus gelesen hab...
 

marian04

Aktives Mitglied
Wenn du das Buch wirklich von Anfang an bis zu einem gewissen Punkt durcharbeitest, wirst du das bestimmt verstehen. Man muss halt etwas Zeit investieren um die Grundlagen zu lernen, bevor man Programmieren kann...

Die Insle sollte wohl geeignet sein, auch wenn ich bis jezz immer nur Auszüge daraus gelesen hab...

Und noch ne Idee warum der Fehler immernoch da ist ? :(
 

hdi

Top Contributor
Ok jetzt versteh ich den Fehler: isEmpty() gibt es erst seit Java 6, du hast noch Java 5.
Entweder du holst dir Java 6 (Sun-Seite), oder du umgehst das halt indem du prüfst:

Code:
kapitelName.equals("");
 

Murray

Top Contributor
Hm...

Code:
import java.lang.*;
ganz oben in die Klasse reinklatschen. Aber eigentlich ist das doch gar nicht nötig...

Richtig, das ist völlig unnötig - java.lang.* ist implizit bekannt; ein explizites import-Statement ändert nichts.

Hier dürfte das Problem eher in einer veralteten Java-Version bestehen (wie Du eben schon geschrieben hast).
 

marian04

Aktives Mitglied
Hab jetzt die Version : jdk1.6.0_12

Ist das die neuste ? und Hält die sich automatisch aktuell ? ich blick bei diesen ganzen Sachen die Sun anbietet net mehr durch ?!

Mfg Marian
 

hdi

Top Contributor
Genau Java 6 Update 12 ist das neueste. Das updatet sich nicht automatisch.
Es ist aber nicht tragisch wenn man nicht auf dem "aktuellen" Stand ist. Viele Leute
bleiben sogar komplett bei Java 5, weil die Abwärtskompatibilität gewährleistet ist.
So für Hobby-Programmierer ist es wohl aber immer gut das neueste zu haben, weil das halt immer Dinge beinhaltet die man sich in älteren Versionen erst selber schreiben müsste.
 

marian04

Aktives Mitglied
Hallo hdi und alle anderen :)

Code:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.util.Random;
import java.awt.*;

public class VokabelTrainer extends JFrame {

  // Member-Variablen macht man alle private!
  private JLabel kapitelAuswahlLabel;
  private JComboBox kapitelAuswahl;
  private Vector<String> kapitel;

  // ...was du sonst noch so haben möchtest
  
            //Button
  JButton btn1 =new JButton("Nächste");
  JButton btn2 =new JButton("Kontrolle");
           //Label
  JLabel lbl1 = new JLabel ("1");
  JLabel lbl2 = new JLabel ("2");
  JLabel lbl3 = new JLabel ("3");
  JLabel lbl4 = new JLabel ("4");
             //Textfeld
  JTextField txteng = new JTextField();
            //Variablen
  String antworteng;
  String loesungde;
  
  
  //Zufallsgenerator
  
  java.util.Random RGen = new java.util.Random();
  int random(int max){
  int i = Math.abs(RGen.nextInt());
  return i % max;
   }
   
   int x=0 ;
   
   
   // Next-Button-Actionlistener
   
   ActionListener A1 = new ActionListener(){
      public void actionPerformed(ActionEvent e){

      x= RGen.nextInt(10);
      lese_DateiEN();
      lese_Dateide();
      getContentPane().remove(lbl2);
      lbl3.setText("");
      lbl4.setText("");
      }
   };
   
   
   //Kontroll-Button-ActionListener
   
   ActionListener A2 = new ActionListener(){
      public void actionPerformed(ActionEvent e){

       int x;
      
       antworteng=txteng.getText();
       loesungde=lbl2.getText();
       if(loesungde.equalsIgnoreCase(antworteng)){
         lbl3.setText("richtig");
         lbl4.setText("");
         }
       else{
         lbl3.setText("Leider Falsch" );
         lbl4.setText("Lösung:"+loesungde);
       }
         

      }

   };
  

  public VokabelTrainer() {

    // Kapitel-Liste befüllen
    kapitel = new Vector<String>();
    for (int i = 0; i < 5; i++) {
      kapitel.add("Kapitel" + (i + 1));
    }

    // JComboBox -- JCheckBox ist dafür ja total doof, hatte ich verplant
    kapitelAuswahl = new JComboBox(kapitel);
    /*
     * Ein ActionListener ist hier doch besser, weil ein ItemListener
     * reagiert 2x beim Klick, und das wollen wir ja nicht. (Würde zwei
     * verschiedene Kapitel laden...)
     */
    kapitelAuswahl.addActionListener(new KapitelListener());

    // Kleines Label
    kapitelAuswahlLabel = new JLabel("Kapitel wählen");

    // Wie gesagt: Lies dir etwas zu Layout-Managern durch um das zu
    // verstehen... Dann kannst du auch weitere Komponenten einfügen.
    // das "FlowLayout" setzt alle Elemente nebeneinander, von links nach
    // rechts.
    setLayout(new GridLayout(3,2));
    add(kapitelAuswahlLabel);
    add(kapitelAuswahl);
    add(btn1, A1);
    add(btn2, A2);
    add(lbl1);
    add(lbl2);
    add(lbl3);
    add(lbl4);

    pack();

    // sollte man immer machen bei JFrames, damit sich das Programm gescheit
    // beendet beim Schliessen vom Fenster:
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  }
  
  public void lese_DateiEN(){
       BufferedReader f;
   String line;

     try {
      f = new BufferedReader(
           new FileReader("english.txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl1.setText(line);

       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }

   public void lese_Dateide(){
       BufferedReader f;
   String line;

     try {
      f = new BufferedReader(
           new FileReader("deutsch.txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl2.setText(line);


       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }
  
  
  
  
  
  
  
  
  

  /*
   * das hier ist eine innere Klasse, kannst du aber auch in eine eigene .java
   * Datei reinschreiben...
   */

  class KapitelListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
      String kapitelName = kapitelAuswahl.getSelectedItem().toString();
      // Eigentlich nicht nötig, aber sicher ist sicher:
      if (kapitelName != null && !kapitelName.isEmpty()) {
        /* Diese Methode muss es logischerweise auch irgendwo geben.... */
        ladeDatei(kapitelName);
      }
    }

    private void ladeDatei(String kapitelName) {

      System.out.println("Es soll die Datei C:/whatever/" + kapitelName
          + ".txt geladen werden.");
      /*
       * du hast hier jetzt einen String, sowas wie "Kapitel1". Wie auch
       * immer du das jetzt tun willst, du kannst eben diese Info nutzen
       * um dann eine Datei einzulesen. Bennennen solltest du die Dateien
       * halt dann eben so, dass irgendwo diese Bezeichnung der
       * Kapitel-Liste drin ist.
       */
    }

  }
  
  public static void main(String[] args)
  {
    JFrame MyFrame = new VokabelTrainer();
      MyFrame.setSize(400,400);
      MyFrame.setVisible(true);
    
  }

  /*public static void main(String[] notUsed) {
    new VokabelTrainer().setVisible(true);
   new VokabelTrainer.setSize(400,400);
  }   */

}


Das ist jetzt mein kompletter Quelltext, leider haben die Button jetzt ihre Wirkung verloren, habe ich den ActionListener evt. falsch zugewiesen ?
Und müsste ich ja, die Variabele kapitelName oben in den BufferedReader machen um dies zu übernehmen oder seh ich das falsch ?

Ach und ich hab den Reader aus meiner alten Version übernommen, deswegen noch die nichtssagende Bezeichnung f :oops:



mfg
 

hdi

Top Contributor
Es fehlt:
Code:
btn1.addActionListener(A1);
btn2.addActionListener(A2);
Alleine einen Listener intantiieren sagt ja noch lange nicht, wo oder ob er überhaupt genutzt wird.

Und nochmal:
-Variablen/Methoden/Klassen sinnvolle Namen geben (nicht btn1, lbl1, A1 usw)
-alle Attribute sollten private sein
-Namen schreibt man übrigens auch in "camelCase", also leseDateiEN statt lese_DateiEN
-die Variablen "antworteng" und "loesungde" sollten keine Attribute sein, sondern lokale Variablen.
Du benutzt die ja nur als kleine Hilfs-Variablen, also erstell die einfach lokal in deinen Listenern.

PS: Schönere Layouts bekommst du hin, wenn du mehrere JPanels machst, und denen Layouts gibst und dort
jeweilige Elemente drauftust. Die einzelnen Panels wiederum addest du dann zum Frame.
So kannst du Layouts ineinander verschachteln.
Bsp:

Code:
JPanel antwortenPanel = new JPanel();
antwortenPanel.setLayout(new FlowLayout());
antwortenPanel.add(lbl1);
// analog zu lbl2-4, dann:
add(antwortenPanel);

..für die Combobox und die 2 Buttons kannst du dann ein zweites Panel machen, zB auch mit FlowLayout,
und dieses auch adden.
 
Zuletzt bearbeitet:

marian04

Aktives Mitglied
Hey,

dass mit den sinnvollen und vielsagenden Namen der Variablen, werde ich mir bei meinem nächsten "Projekt" ans Herz legen! versprochen :)

Zu dem JPanel, da muss ich mich nochma schlau machen wie genau das geht usw.

Das mit der KapitelAuswahl klappt leider immernoch nicht :( obwohl ich denke, dass es so aussehen muss wie es jetzt aussieht, aber das muss ja nichts heißen.

hdi hast du noch einen guten Buchtipp für Oberflächen Programmierung mit swing und dem ganzen anderen Zeugs ?



Mfg marian
 

marian04

Aktives Mitglied
Hdi danke für den Tipp.

Aber ich muss euch leider nochma mit meinem Problem belästigen :

Jetzt habe ich im Quelltext ( teilweise von hdi danke nochmal) eine String variable kapitelName.

Diese muss ich doch nun meinem BufferReader hinzufügen oder nicht ?
Dann sieht das so aus :

Code:
  public void lese_DateiEN(){
       BufferedReader f;
   String line;

     try {
      f = new BufferedReader(
           new FileReader(kapitelName+".txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl1.setText(line);

       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }

Aber immer wenn ich ein Kapitel wähle, ja die Dateien mit diesen Namen sind vorhanden, kommt : " Fehler beim lesen der Datei"


Wo liegt mein Fehler nun schon wieder ?


mfg



@ hdi : Ja ich weiß er heißt immernoch f aber mir fällt nix besseres ein !
 
Zuletzt bearbeitet:

hdi

Top Contributor
teste:

Code:
int errCode = 99;
File check = new File( kapitelName + ".txt" );
if( !check.exists() ) errCode = 1;
if( !check.isFile() ) errcode = 2;
if( !check.canRead() ) errCode = 3;
System.out.println("errCode is: "+errCode); // bei "99" ist alles okay

Was ist bei dir das "x"? Sieht wieder sehr stark nach einer Variablen aus die du besser
lokal machen solltest.

@ hdi : Ja ich weiß er heißt immernoch f aber mir fällt nix besseres ein !
Zugegeben für solche Dinge denkt man sich auch keine grossartigen Bezeichnungen aus, in dem Fall benennt man die Variable
halt einfach nach der Klasse oder einer Abkürzung:

BufferedReader -> reader / buffReader

PS: besser ist das ganze wohl zeilenweise auszulesen:

Code:
String vokabel;
while ((vokabel = reader.readLine) != null){
       vokabelListe.add(vokabel); // oder sowas
}

das ganze wird dann zeilenweise durchgegangen bis readLine ein "null" zurückgibt,
d.h. die Datei ist zu Ende. türlich solltest du dann in der Datei die einzelnen Einträge
auch zeilenweise drinstehen haben.
 
Zuletzt bearbeitet:

marian04

Aktives Mitglied
teste:

Code:
int errCode = 99;
File check = new File( kapitelName + ".txt" );
if( !check.exists() ) errCode = 1;
if( !check.isFile() ) errcode = 2;
if( !check.canRead() ) errCode = 3;
System.out.println("errCode is: "+errCode); // bei "99" ist alles okay

Also wenn du mir jetzt noch sagst, wo ich dieses Codestückchen hinsetzen soll ?

Also , dass int errCode = 99 eine Variable der int Form ist, ist mir klar.
Das Filecheck = new Filecheck usw oben hin muss is mir auch klar ( übersichtlichkeit)

Aber das If und if und if ? Tut mir leid ka ?!

mfg


Edit: Also der Bufferreader liest den Text in der .txt doch Zeilenweise ein !
Sonst würde mein alter "VokabelTrainer" ja nicht funktionieren, das war so , dass er aus einer txt. english sich die Vokabel holt ausgibt und man die deutsche hinschreibt.
Die Lösung zu der eng Vokabel stand in einem anderen txt-File in der gleichen Zeile !!
 
Zuletzt bearbeitet:

hdi

Top Contributor
Okay mach das mit deinem Einlesen wie du das dachtest.

Zu dem Check: Hier wird nur mal überprüft ob er das File findet.
Du erstellst ein File, so wie es auch der FileReader machen würde.

Die drei if-Abfragen prüfen:

- Findet er das File / Gibt es das File? (also ist die Pfadangabe korrekt)
- Ist es wirklich eine Datei (und nicht ein Ordner) ?
- Kann Java das File öffnen/lesen ?

Das tust du einfach mal an den Anfang deiner leseDatei() Methode rein,
um zu kucken ob das passt.
Denn wenn er schon das file nicht findet, dann isses kein Wunder dass er
nix einlesen kann.

Du musst das auch nich mit diesen "errcodes" machen. Mach gleich nach jeder
Überprüfung ein System-out, ob es funktioniert hat oder nicht.
(Ob also bei allen Abfragen ein "true" herauskommt)
 

hdi

Top Contributor
Ja wie gesagt mein Bsp Code war etwas undurchdacht xD
Das kann jetzt alles mögliche sein, war n dummer Test sorry ;)

Ich glaub ich weiss jetzt eh wo dein Problem liegt: Schon klar, dass du
einen gültigen Pfad angeben musst oder?

Code:
String filePath = "C:/MeineVokablen/"+kapitelName +".txt"; // Bsp

Teste mal damit so:

Code:
String filePath = "C:/MeineVokablen/"+kapitelName +".txt";
System.out.println("Try to read file "+filePath);
File check = new File(filePath);
if(check.exists()){
	System.out.println("File exists.");
}
else{
	System.out.println("File does not exist.");
}

Du musst ja den exakten, vollständigen Pfad deiner Dateien angeben.
 

marian04

Aktives Mitglied
Code:
Try to read file C:/MeineVokabeln/null.txt
File does not exist.
Fehler beim Lesen der Datei

Das kommt raus. logischerweise findet er die Datei null.txt nicht, da die Dateien :Kapitel1 Kapitel2 usw heißen, wie sie auch in der ComboCheckbox heißen..

Warum sucht er die Datei null.txt ?


Code:
Es soll die Datei C:/MeineVokabeln/Kapitel2.txt geladen werden.
Try to read file C:/MeineVokabeln/null.txt
File exists.
Fehler beim Lesen der Datei

Das ist, wenn ich die Datei null.txt einfach mal erstelle , dann hat er immernoch einen Fehler beim Lesen.




Mfg
 
Zuletzt bearbeitet:

hdi

Top Contributor
Dann hängt er im Falle von null.txt an einer andere Stelle, wohl canRead()

Aber mal von vorne:

Dein Listener von der Checkbox returned ein null-Objekt (daher "null"),
anstatt "Kapitel1" usw. Da stimmt also etwas nicht.

Zeig nochmal den Code vom Listener bitte, wie du ihn grad hast.

Und danach musst du schauen dass du den Lese-Fehler wegkriegst.
Um die Ursache erstmal genau zu ermitteln, solltest du den Test erweitern:

[HIGHLIGHT="Java"]if(check.isFile()){
System.out.println("File is valid.");
}
else{
System.out.println("File is not valid.");
}
if(check.canRead()){
System.out.println("Can read file.");
}
else{
System.out.println("Can not read file!");
}[/HIGHLIGHT]

Wenn er das File nicht lesen kann fehlt dir die Berechtigung dafür. Hast du Windows oder Linux?
Bei Windows Rechts-Klick -> Eigenschaften/Properties und dort kucken ob ein
Hälchen bei "schreibgeschützt" ist.
Mit Linux kenn ich mich nich aus.
 

marian04

Aktives Mitglied
Okay,
hier einmal das was du mir für die Combobox geschrieben hast :

Code:
class KapitelListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
      String kapitelName = kapitelAuswahl.getSelectedItem().toString();
      // Eigentlich nicht nötig, aber sicher ist sicher:
      if (kapitelName != null && !kapitelName.isEmpty()) {
        /* Diese Methode muss es logischerweise auch irgendwo geben.... */
        ladeDatei(kapitelName);
      }
    }

    private void ladeDatei(String kapitelName) {

      System.out.println("Es soll die Datei C:/MeineVokabeln/" + kapitelName
          + ".txt geladen werden.");

     
    }

  }

Und hier das nochmal die Fehlerausgabe der neuen Prüfung,wenn man die Datei null.txt erstellt hat:

Code:
Try to read file C:/MeineVokabeln/null.txt
File is valid.
Can read file.
Fehler beim Lesen der Datei

Benutze Windows XP Pro Sp3, die Dateien sind nicht Schreibgeschützt auch nicht der Ordner !

mfg
 

hdi

Top Contributor
Das kann nicht sein, dass das null ist. Die Methode wird nur aufgerufen, wenn es eben
nicht null ist.

Poste bitte nochmal deinen kompletten Code, irgendwas stimmt da nicht.

PS: Hast du Skype? Hab grad n Konto eingerichtet (siehe Signatur), weil bei solchen
Dingen isses viel angenehmer das real-time zu besprechen, und auch viel viel schneller
gelöst.
 

marian04

Aktives Mitglied
Code:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.util.Random;
import java.awt.*;

public class VokabelTrainer extends JFrame {

  // Member-Variablen macht man alle private!
  private JLabel kapitelAuswahlLabel;
  private JComboBox kapitelAuswahl;
  private Vector<String> kapitel;
  String kapitelName;



  // ...was du sonst noch so haben möchtest
  
            //Button
  JButton btn1 =new JButton("Nächste");
  JButton btn2 =new JButton("Kontrolle");

           //Label
  JLabel lbl1 = new JLabel ("1");
  JLabel lbl2 = new JLabel ("2");
  JLabel lbl3 = new JLabel ("3");
  JLabel lbl4 = new JLabel ("4");
             //Textfeld
  JTextField txteng = new JTextField();
            //Variablen
  String antworteng;
  String loesungde;
  
          //JPanel
   JPanel antwortenPanel = new JPanel();

          
  
  
  //Zufallsgenerator
  
  java.util.Random RGen = new java.util.Random();
  int random(int max){
  int i = Math.abs(RGen.nextInt());
  return i % max;
   }
   
   int x=0 ;
   
   /* File check = new File( kapitelName + ".txt" );
     if( !check.exists() ) errCode = 1;
     if( !check.isFile() ) errcode = 2;
     if( !check.canRead() ) errCode = 3;
     System.out.println("errCode is: "+errCode); // bei "99" ist alles okay     */
   
   
   // Next-Button-Actionlistener
   
   ActionListener A1 = new ActionListener(){
      public void actionPerformed(ActionEvent e){

      x= RGen.nextInt(10);

      lese_DateiEN();
      lese_Dateide();
      getContentPane().remove(lbl2);
      lbl3.setText("");
      lbl4.setText("");
      }
   };
   
   
   //Kontroll-Button-ActionListener
   
   ActionListener A2 = new ActionListener(){
      public void actionPerformed(ActionEvent e){

       int x;
      
       antworteng=txteng.getText();
       loesungde=lbl2.getText();
       if(loesungde.equalsIgnoreCase(antworteng)){
         lbl3.setText("richtig");
         lbl4.setText("");
         }
       else{
         lbl3.setText("Leider Falsch" );
         lbl4.setText("Lösung:"+loesungde);
       }
         

      }

   };
   
   

  

  public VokabelTrainer() {

    // Kapitel-Liste befüllen
    kapitel = new Vector<String>();
    for (int i = 0; i < 5; i++) {
      kapitel.add("Kapitel" + (i + 1));
    }

    // JComboBox -- JCheckBox ist dafür ja total doof, hatte ich verplant
    kapitelAuswahl = new JComboBox(kapitel);
    /*
     * Ein ActionListener ist hier doch besser, weil ein ItemListener
     * reagiert 2x beim Klick, und das wollen wir ja nicht. (Würde zwei
     * verschiedene Kapitel laden...)
     */
    kapitelAuswahl.addActionListener(new KapitelListener());

    // Kleines Label
    kapitelAuswahlLabel = new JLabel("Kapitel wählen");

    // Wie gesagt: Lies dir etwas zu Layout-Managern durch um das zu
    // verstehen... Dann kannst du auch weitere Komponenten einfügen.
    // das "FlowLayout" setzt alle Elemente nebeneinander, von links nach
    // rechts.
    /*setLayout(null);
    add(kapitelAuswahlLabel);
    add(kapitelAuswahl);
    add(btn1);
    add(btn2);
    add(lbl1);
    add(lbl2);
    add(lbl3);
    add(lbl4);
    add(txteng);
    btn1.addActionListener(A1);
    btn2.addActionListener(A2);

    pack();  */

    // sollte man immer machen bei JFrames, damit sich das Programm gescheit
    // beendet beim Schliessen vom Fenster:


    
    
    getContentPane().setLayout(null);
   lbl1.setBounds(15,160,60,50);
   getContentPane().add(lbl1);

   lbl2.setBounds(360,360,1,1);
   getContentPane().add(lbl2);

   lbl3.setBounds(130,160,100,50);
   getContentPane().add(lbl3);

   lbl4.setBounds(230,160,100,50);
   getContentPane().add(lbl4);


    btn1.setBounds (15,210,110,50);
    btn1.addActionListener(A1);
    getContentPane().add(btn1);

    btn2.setBounds (130,210,110,50);
    btn2.addActionListener(A2);
    getContentPane().add(btn2);
    

    txteng.setBounds (10,110,60,30);
    getContentPane().add(txteng);
    
     add(kapitelAuswahlLabel);
    add(kapitelAuswahl);

     kapitelAuswahlLabel.setBounds(10,10,100,25);
     getContentPane().add(kapitelAuswahlLabel);
     
     kapitelAuswahl.setBounds(120,10,100,25);
     getContentPane().add(kapitelAuswahl);
    
    
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  }
  
  public void lese_DateiEN(){
       BufferedReader f;
   String line;

    String filePath = "C:/MeineVokabeln/"+kapitelName +".txt";
       System.out.println("Try to read file "+filePath);
     File check = new File(filePath);

      if(check.isFile()){

                  System.out.println("File is valid.");

              }

              else{

                  System.out.println("File is not valid.");

              }

              if(check.canRead()){

                  System.out.println("Can read file.");

              }

              else{

                  System.out.println("Can not read file!");

              }






     try {
      f = new BufferedReader(
           new FileReader(kapitelName+".txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl1.setText(line);

       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }

   public void lese_Dateide(){
       BufferedReader f;
   String line;

     try {
      f = new BufferedReader(
           new FileReader("deutsch.txt"));

       for (int i=1;i<x;i++){

       line = f.readLine();
         //System.out.println(line);
         lbl2.setText(line);


       }
      f.close();
     } catch (IOException e) {
       System.out.println("Fehler beim Lesen der Datei");
    }
   }
  
  
  
   /*
   * innere Klasse, kann auch in eigene .java ausgelagert werden.
   */

  class KapitelListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
      String kapitelName = kapitelAuswahl.getSelectedItem().toString();
      // Eigentlich nicht nötig, aber sicher ist sicher:
      if (kapitelName != null && !kapitelName.isEmpty()) {
        /* Diese Methode muss es logischerweise auch irgendwo geben.... */
        ladeDatei(kapitelName);
      }
    }

    private void ladeDatei(String kapitelName) {

      System.out.println("Es soll die Datei C:/MeineVokabeln/" + kapitelName
          + ".txt geladen werden.");

      /*
       * du hast hier jetzt einen String, sowas wie "Kapitel1". Wie auch
       * immer du das jetzt tun willst, du kannst eben diese Info nutzen
       * um dann eine Datei einzulesen. Bennennen solltest du die Dateien
       * halt dann eben so, dass irgendwo diese Bezeichnung der
       * Kapitel-Liste drin ist.
       */
    }

  }
  
  public static void main(String[] args)
  {
    JFrame frame = new VokabelTrainer();
      frame.setSize(400,400);
      frame.setVisible(true);
      

   }


}

Hier der Code Skype muss ich leider passen, aber kann ich mir einrichten !
Haste kein Icq ?
Ps: Skype dauert bei mir noch 17 min, hab leider nur dsl Light

mfg
 
Zuletzt bearbeitet:

hdi

Top Contributor
Ach du sch*** :rolleyes:
Du hast das ja absolut falsch verstanden alles.

1. Der gesamte Inhalt der lese_DateiEN() Methode kommt in die ladeDatei()-Methode
2. Die lese_DateiEN()-Methode wird dann nicht mehr gebraucht
3. "kapitelName" ist ein LOKALER String,wie oft denn noch... Hau den Schmarrn oben
aus deiner Klasse raus...
4. Dann geht's auch

5.
Dir fehlen die wesentlichen Basics im Verständnis von Methoden und Variablen.
Bitte google nach "javainsel 8" und lies dir die ersten 10 Kapitel durch.
 

hdi

Top Contributor
Sollte jetzt nich so rüberkommen.
Aber weisst du wenn du da eine leere Methode drinhast und lokale
Variablen mit Attributen verwechselst, und dir das nichmal auffällt.. Ja dann muss man leider
erst ein wenig Java-Insel lesen ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
KogoroMori21 Java Datum Differenz (kleiner Fehler) Java Basics - Anfänger-Themen 10
A jar File kleiner bekommen Java Basics - Anfänger-Themen 3
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
P String größer kleiner gleich vergleichen Java Basics - Anfänger-Themen 6
Q Variablen If Anweisung, kleiner fehler Java Basics - Anfänger-Themen 8
F Kleiner Formatierungsfehler Java Basics - Anfänger-Themen 3
J Kleiner Taschenrechner! Anfänger braucht Hilfe :( Java Basics - Anfänger-Themen 2
S GUI kann im WindowBuilder nicht mehr (größer kleiner ziehen) Java Basics - Anfänger-Themen 2
D kleiner Taschenrechner mit switch fehlerhaft Java Basics - Anfänger-Themen 1
H Erste Schritte Ergebniss soll kleiner als 1000 sein Java Basics - Anfänger-Themen 4
DStrohma Operatoren Kleiner-Zeichen in Größer-Zeichen ändern wenn boolen true? Java Basics - Anfänger-Themen 6
M Kleiner unauffindbarer Fehler im Programm Java Basics - Anfänger-Themen 6
E Erste Schritte Array soll kleiner werdenden String erstellen Java Basics - Anfänger-Themen 5
J Vererbung Kleiner Fehler, weiß aber nicht warum und wo Java Basics - Anfänger-Themen 9
R Inhalt vom String größer oder kleiner als Java Basics - Anfänger-Themen 16
J kleiner Fehler im FAQ Parser für mathematische Formeln Java Basics - Anfänger-Themen 5
F Objekte vergleichen kleiner/größer? Java Basics - Anfänger-Themen 4
L Kleiner erster p2p-Chat Problem Java Basics - Anfänger-Themen 2
K Kleiner Fehler bei Methoden Implementierung Java Basics - Anfänger-Themen 6
R Primzahl kleiner 3 Java Basics - Anfänger-Themen 2
O Ist diese Zahl größer oder kleiner 0? Java Basics - Anfänger-Themen 6
M Kleiner Fehler im Array... Java Basics - Anfänger-Themen 2
E BubbleSort kleiner Fehler? Java Basics - Anfänger-Themen 14
T kleiner fehler mit der "Zählvariable" Java Basics - Anfänger-Themen 6
S Kleiner Palindromtest Java Basics - Anfänger-Themen 4
C Größer - Kleiner - Zeichen in Strings Java Basics - Anfänger-Themen 3
V Kleiner Wecker mit Gui (Brauche Tipps) Java Basics - Anfänger-Themen 5
A JButton wird kleiner mit Border Java Basics - Anfänger-Themen 3
A Kleiner Fehler Java Basics - Anfänger-Themen 4
G Kleiner Denkfehler Java Basics - Anfänger-Themen 23
G Kleiner Währungsrechner - Probleme ! Java Basics - Anfänger-Themen 16
H Fenster größer kleiner machen(Inhalt soll mitziehen) Java Basics - Anfänger-Themen 4
F Kleiner Fehler, den ich aber leider nicht finde. Java Basics - Anfänger-Themen 4
G gerade zahlen größer und kleiner null Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben