Methoden JTextArea auslesen und in JTextfield ausgeben

JavixLeup

Mitglied
Ein freundliches Hallo ins Forum,

ich bringe mir das "weite Feld" der Programmierung ein wenig bei und hänge bei einer simplen Grundproblematik: Ich möchte, dass der User einen Text in die JTextArea eingibt (Bsp.: Java ist ein tolles Programm.) und dass in einem zweiten Feld wieder in einer JTextAreazu diesem Satz eine Frage gestellt werden kann (Bsp.: Was ist Java?). Über den Actionbutton soll dann in einem JTextField die Antwort generiert werden (Bsp.: Antwort: ein tolles Programm).

Das ist meine Grundfrage: Wie lese ich den eingegeben Text aus, zerlege ihn (Array????) und kann ihn wieder ausgeben. Die Ausgabe bringt mich schon zum verzweifeln....

Folgendes habe ich bereits programmiert:

Die Klasse GUI:

Java:
package masterchief01;

public class GuiMasterchief extends javax.swing.JFrame {

    public KSatzerkennung SE;
    public KFrageerkennung FE;
    String Satz;
    String Frage;
    
    public GuiMasterchief() {
        initComponents();

         SE = new KSatzerkennung();
        FE = new KFrageerkennung();
    }


..in der Klasse GUI den ActionButton, der auf die Methoden aus den weiteren Klassen lesen soll:

Java:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
       // SE = Satzerkennung des Users
        String Satz = this.TextArea_Satzeingabe.getText();
        SE.SetzeText(Satz);//hier wird der Text eingelesen
        SE.Scanner();//hier soll gescannt werden und die Strings zerlegt 
        SE.Parser(); //hier möchte ich mit Schleifen die "Grammatikstruktur" beschreiben
        SE.Display();//Ausgabemethode in die JTextArea = Ergebnis
        
        
        //FE = Frageerkennung des Users --> sowie Matching mit Satz
        String Frage = this.TextArea_Frageeingabe.getText();
        FE.SetzeText(Frage);
        FE.Scanner();
        FE.Display();

soweit so gut.....nun das Highlight aus der Klasse Satzerkennung:

Java:
package masterchief01;

public class KSatzerkennung {
   
String satz;
String[] SArray = null;
String Pronomen = "er, sie, es, wir, ihr, sie, Er, Sie, Es, Wir, Ihr, Sie";
String Verben = "laufen,gehen, stehen";
String Interpunktion = "?,!,.";       
String[] NamenArray = {"Peter", "Paul", "Hans"};
String[] VerbenArray = Verben.split("[,]", -1);
String[] PronomenArray = Pronomen.split("[,]",-1);
String[] InterpunktionsArray = Interpunktion.split("[,]", -1);
  //bei den ganzen Strings bin ich mir nicht sicher, ob die Vordefinition richtig ist....immerhin gibt es im deutschen tausende Verben und die kann man ja nicht alle in einen String packen....  
      

public void SetzeText(String text1) {//Hier wird der Satz erstellt
            satz = text1;     
    }
    
public void Scanner(){//Übergabe des Satzes
    SArray = satz.split("[ ,.]", -1);
}

public void Parser() {
    String[] Verben = new String[1]; 
 
    }

public void Display() {//Ausgabe der Antwort
   System.out.printf("Das Array hat %d Einträge%n", SArray.length);
   for (int i = 0; i < SArray.length; i++) {
   System.out.printf("Das %d. Element hat den Wert: %s%n", i, SArray[i]);
        }
}
}

Ich hoffe, dass es nicht zu viel Wirrwar ist und freue mich über Tipps. Aber bitte nicht zu krasse Ansätze erklären....das verstehe ich noch nicht🙁

Danke Euch!!!!
 
Danke für die Einschätzung....ich habe auch schon gedacht, dass es möglich ist, wenn ich einen Pool an Sätzen/Satzfragmenten o.ä. vorgebe (über eine Combobox etc.) und der User sich sozusagen einen Satz aussuchen kann.

Der Grundgedanke soll eben die Analyse des Strings sein, den ich in Arrays zerlege und dann mit if/else/for/while Anweisungen prüfe und dazu etwas ausgebe.
Grundsätzlich möchte ich die Satzstruktur nach Substantiv/Nomen/Pronomen + Verb + Objekt aufbauen.

Hast du dazu eine Idee??? Danke vielmals.
 
Hi,
Einen String kannst du mit der split- Methode der String-Klasse zerlegen. String (Java Platform SE 7 )
Beispiel wäre:
Java:
String str = "Das ist ein neuer Satz";
String[] splitString = str.split(" ");
dann mit
Java:
for (String str : splitString) {
   System.out.println(str);
}
Statt der Ausgabe auf der Console kannst du in diesem for-each- loop die einzellnen Wörter analysieren und je nach dem was du damit machen möchtest, weitere Aktionen ausführen.
Im obigen Beispiel wird ein SPACE als delimiter zum Splitten eingesetzt. Dies kann aber ein beliebiger charater sein.
 
Zuletzt bearbeitet:
Mal abgesehen davon das die Antwort auf die Frage "Was ist Java" nicht "Ein tolles Programm" sondern eher "Eine tolle Hochsprache" wäre 🙂, ist dein vorhaben durchaus realisierbar, allerdings denke ich nicht das es ohne weiteres bei deinem, nach eigenen Aussage noch recht niedrigen Wissensstand ohne Probleme umsetzbar sein wird.

Man könnte z.B hier mit einem DocumentListener arbeiten welcher auf eingaben in der JTextArea lauscht, bei Betätigung eines Buttons könnte man dann mit einem ActionListener die per DocumentListener ggf. in einem Array gesammelten eingaben auslesen und auswerten.

Frage vorab , wieviel Grundwissen ist denn deinerseits in OOP vorhanden ?

Schönen Sonntag 🙂
 
Da geht es schon los🙂 OOP = objektorientierte Programmierung??!!

Das Vorwissen ist ziemlich dürftig. Ich kann Klassen erschaffen und Konstruktoren schreiben. In meinem derzeitigen Programm arbeite ich das erste Mal mit einer SWING GUI und verstehe einfach nicht, wo die Kommandos wann wohin geschrieben werden müssen, damit Java es abarbeitet.
Die Idee mit den Listenern überfordert mich völlig, aber ich denke, dass DU meine Idee absolut auf den Punkt triffst.

ich möchte auf jeden Fall den Text aus dem JTextField auslesen und dann Scannen lassen....daraufhin durch meine Parser-Methode jagen, die es mit der Frage abgleicht....und hinterher das gematchte Ergebnis in eine JTextArea ausgeben.

Aus meiner Sicht können das auch ganz einfache Sätze sein, die ich zur Auswahl biete.....ich bin damit etwas überfordert und komme auch mit Tutorial-Videos tec. nicht mehr weiter. Leider fehlen mir da die Grundlagen und die Zeit...
 
Also ja OOP ist Objekt Orientierte Programmierung ^^ im Gegensatz zu Prozeduraler Programmierweise wie z.B in der Programmiersprache C, teilst du hier alles in einzelne Objekte ein und schaffst so unter anderem Trennung von Zuständigkeiten.

Du musst dir im Klaren sein das ein JTextField != JTextArea ist, vorher hattest du geschrieben du möchtest den Text den ein User in einer JTextArea eingibt auslesen, nun aus einem JTextField ^^

also , du kannst Text per
Code:
.getText();
aus einem JTextField auslesen,

Hier mal ein Extrem Simpel gehaltenes Beispiel :



Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class TextReadExample extends JPanel {
    private static final long serialVersionUID = 1L;

    JButton btn;
    JTextField txt;
    JTextArea area;
    
	public TextReadExample() {
		setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
		
		txt = new JTextField();
		area = new JTextArea();
		
	    btn = new JButton("Klick mich");
	    btn.addActionListener(new ButtonListener(area));

	    add(txt);
	    add(area);
	    add(btn);
	    
    }
	
	class ButtonListener implements ActionListener{

		JTextArea area;
		
		public ButtonListener(JTextArea area) {
	        this.area = area;
        }
		
		@Override
        public void actionPerformed(ActionEvent e) {
	       area.setText(txt.getText());
        }	
	}
}

und die main Methode in einer Separaten Klasse :

Java:
public class ReadTest {

	public static void main(String[] args) {
	    JFrame f = new JFrame();
	    
	    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	    f.add(new TextReadExample());
	    f.pack();
	    f.setLocationRelativeTo(null);
	    f.setVisible(true);
    }
}


Der Entscheidende Teil ist hier das was in der actionPerformed Methode des Listeners ausgeführt wird,

Java:
 @Override
        public void actionPerformed(ActionEvent e) {
           area.setText(txt.getText());
        }

hier wird bei Betätigung des Buttons mit der methode
Code:
.getText();
der Klasse JTextField, welche einen String mit dem Inhalt des TextFeldes zurückliefert und der Verwendung der Methode
Code:
.setText();
der Klasse JTextArea, einfach nur der Text von einer Komponente in eine andere Übertragen.

ich möchte auf jeden Fall den Text aus dem JTextField auslesen und dann Scannen lassen....daraufhin durch meine Parser-Methode jagen, die es mit der Frage abgleicht....und hinterher das gematchte Ergebnis in eine JTextArea ausgeben.


[TIPP]Falls dies eine Art Quiz werden sollte , solltest du deine Herangehensweise nochmal überdenken, denn was passiert wenn ein User eine Frage eingibt die nicht existiert, oder sich verschreibt ?
Die Anzahl an Zuständen die du mit if-Anweisungen oder cases abzudecken müsstest , wird ziemlich nunja....voluminös, bzw. wäre der User nach 3-4 maliger falscheingabe derart genervt ^^🙂
[/TIPP]

Ansonsten klär mich mal auf , damit ich weis worauf du hinaus willst 🙂
 
Zuletzt bearbeitet:
Die set.Text und die get.Text Methoden möchte ich anwenden. Ich weiß nur nicht genau wie.

Ich habe es bereits geschafft, dass der in die JTextArea eingegeben Text eingelesen wird:

Main-Methode GUI:

Java:
private void Button_AntwortActionPerformed(java.awt.event.ActionEvent evt) {                                               

        String Satz = this.TextArea_Satzeingabe.getText();
        SE.SetzeText(Satz);
        SE.Scanner();
        SE.Parser();
        SE.Display();

...nun zerlegt er den String text1 durch text1.split in Arrays (0-...)

Java:
public void SetzeText(String text1) {//Hier wird der Satz erstellt
            satz = text1;     
            SArray = text1.split("[ ,.]", -1);
         
        System.out.println(text1);    
            }

Beispiel

Eingabe: Java ist gut.
Frage dazu: Was ist Java?
Konsole:

Java:
Java ist gut.
Das Array hat 4 Einträge
Das 0. Element hat den Wert: Java
Das 1. Element hat den Wert: ist
Das 2. Element hat den Wert: gut
Das 3. Element hat den Wert: 
Was ist Java?
Das Array hat 3 Einträge
Das 0. Element hat den Wert: Was
Das 1. Element hat den Wert: ist
Das 2. Element hat den Wert: Java?

Wie kann ich diese Arrays auslesen und mit Schleifen verbinden.....nach dem Motto:
If Array 0 = Was; print.ln(Array2).

Das hieße er reagiert auf das Was und sucht nach der Eigenschaft.

Ich hoffe es wird verständlich, was ich meine???:L
 
Puhhh, der Code sieht grausam aus ^^ Variablen schreibt man lowerCamelCase, und verwendet eindeutige Namen, aber nun gut, ich versuche mal das ganze zu entwirren:

Ersteinmal vorab, gibt der User nun die Frage in einer JTextArea ein oder in einem JTextField ?

Ich versteh zumal immernoch den Zusammenhang zwischen dem Satz den der User eingibt und der Frage noch nicht,

Soll der USER alle Felder ausfüllen ? soll die Frage aus dem eingegebenen Satz generiert werden ?

Dient das ganze dazu eine Art Quizkarte zu erstellen, diese an späterer Stelle verwendet werden soll ?

Geht es nur um die Optische Darstellung des ganzen ?

Mir bleibt der Tiefere Sinn hinter dem Satz noch irgendwie verborgen , bzw. der Zusammenhang zwischen Satz und Frage/Antwort 🙂

Klär mich fix auf und wir schauen uns das mal gemeinsam genauer an, und dann zeig ich dir auch wie du einzelne Felder in einem Array ansteuern/vergleichen kannst 🙂
 
Zuletzt bearbeitet:
1. Der User gibt es in eine JTextArea ein.

2. In einer zweiten JTextArea gibt er eine Frage ein, die eine Information aus dem oben eingegeben Satz ziehen soll.

3. Das Programm erkennt den Zusammenhang und gibt die Antwort aus.

Also wieder ein Beispiel:

1. Eingabe: Ich programmiere heute einen Taschenrechner.
2. Frage: Was programmiere ich heute?
3. Antwort: Einen Taschenrechner.

--> Alle Eingaben sollen wenn möglich nicht vorgegeben werden...das würde dann das Programm vollkommen ad absurdum führen.

Dieses Programm soll eine selbst geschaffene (informelle) Grammatik enthalten, die irgendwie den Satz einliest und mit der Frage abgleicht, um dann die Antwort zu generieren.

Das ist vollkommen sinnlos...aber leider mir so vorgegeben:-(

Ich weiß nicht, wie ich das umsetzen soll....danke für dein Engagement!!!!
 
Das ähnelt schon einer Art KI 😉

Dein Programm soll also (wenn ich es richtig verstehe) aus einem Satz und einer Frage dazu, die beide vom User eingegeben werden eine Grammatikalisch richtige Antwort generieren , ist das soweit korrekt ?
 
Wie Thallius soeben, insofern meine Annahme korrekt sein sollte schon richtig angemerkt hat, bedarf es schon weitaus mehr als nur Grundkenntnissen in OOP.

Da das Programm automatisch nicht nur den Satz und die dazu gehörende Frage auswerten müsste sondern auch eine Grammatisch korrekte Antwort generieren soll, und dies ohne Vorgegebene Sätze , müsste deine Anwendung ja insoweit lernfähig (KI) sein das es bei egal welcher Eingabe , unbekanntem Satz/Frage , wissen müsste welches Wort ein Verb / Adjektiv / Pronomen usw. ist, um dann daraus

1. eine Frage zu formulieren
2. diese dann nicht nur zu der Satz/Frage Kombination passt, sondern auch noch Grammatikalisch richtig ist.


Dies ist definitiv nicht (ohne weiteres) umsetzbar.

[EDIT]Was mich nun allerdings brennend interessieren würde ist , wer dies in der Form und in welcher hinsicht als Aufgabe stellt?![/EDIT]
 
Zuletzt bearbeitet:
...so soll das Programm werden....doch ich denke, dass ich es nur mit einem Pool an vorgegebene Sätzen, Wortfragmenten umsetzen kann.

Wäre das eine Möglichkeit?? Wie würde das mit vorformulierten Sätzen funktionieren??


P.S.: Wer....der Ausbildungsleiter!!! (fragt lieber nicht???:L)
 

Zurück
Oben