Java Textarea und Zeichenanzahl

  • Hallo allesamt

    ich soll für die Schule ein einfaches Javaprogramm schreiben, dass aus einem Gui Fenster einen Text ausliest, ihn mit einer simplen Cäser-Verschlüsselung verschlüsselt und ihn dann wieder ausgiebt.
    Soweit funktioniert alles. Aber das Problem ist, dass ich wissen muss, wie viele Zeichen insgesamt Verschoben werden müssen, damit meine Funktion weiß, wann sie aufzuhören hat.
    Bis Jetzt habe ich die Zeichenanzahl mit dem Befehl
    ta_Eingabe.getCaretPosition()
    bestimmt. Allerdings ist das nicht gerade die beste Lösung, da der Cursor nicht immer zwangsweise am Ende steht und somit ein Teil des Textes möglicherweise nicht verschlüsselt wird.
    Weiß zufällig jemand eine bessere möglichkeit, um die Anzahl der Zeichen in einem TEXTAREA auszulesen?


    Vielen Dank schon mal im vorraus

  • Ich habe ein weiteres Problem mit einem Textarea weshalb ich keinen neuen Post eröffnen wollte.

    Ich hab ein GUI von einem aus meiner Klasse. Das ist kein AWT sonder Swing. Wenn ich jetzt die setText methode verwende dann wird der Text trotzdem angehangen wie bei einem append befehl bei AWT?
    Woran liegt das?

    Danke im Vorraus

  • Wenn ich jetzt die setText methode verwende dann wird der Text trotzdem angehangen wie bei einem append befehl bei AWT?
    Woran liegt das?

    Dieses Verhalten wäre mir ganz neu. Bist du sicher, dass du nicht vielleicht den bestehenden Text aus dem Feld irgendwie "mitnimmst"? Poste mal den Code, dann hilft sich einfacher.

  • Hier ist mein Code



    Die Benennung (Namen der Attribute und Methoden) ist nicht ganz logisch
    bitte nicht so sehr darauf achten ^^

  • also nützlich wäre noch der code von myCaesar.getCypher().....

    btw: ich würde sCurrentValue mit der string-funktion equals und nicht mit == vergleichen.... (ist so üblich)
    würde dann so aussehen: if (sCurrentValue.equals("Caesar"))

    "ich bin so kluk. K-L-U-K"
    (Homer Jay Simpson)

  • btw: ich würde sCurrentValue mit der string-funktion equals und nicht mit == vergleichen.... (ist so üblich)

    Es ist nicht nur so üblich, es ist notwendig, equals() zu verwenden. == vergleicht, ob es sich bei den beiden Operanden um ein und dasselbe Objekt handelt. equals() prüft hingehen, ob die beiden Operanden denselben String repräsentieren.

  • Es ist nicht nur so üblich, es ist notwendig, equals() zu verwenden.



    Bei mir funktionierte das bis jetzt immer...


    Naja hier ist getCypher

    Zitat

    protected String getCypher () {
    return this.cypher;
    }



    protected deshalb, weil getCypher nicht in Caesar sondern in der Klasse Krypto ist und vererbt wird.

  • ok...de getCypher() methode is nicht:D
    aber kontrollier mal, alle methoden, die diesen string cypher verändern! (zb encrypt)
    viell ist dir dort irgndwo ein kleiner fehler passiert?

    "ich bin so kluk. K-L-U-K"
    (Homer Jay Simpson)

  • Zitat

    "Es ist nicht nur so üblich, es ist notwendig, equals() zu verwenden"

    ...Bei mir funktionierte das bis jetzt immer...

    Reiner zufall, weil viele VMs oft so optimieren, das die offensichtlich gleichen Strings nicht doppelt im Hauptspeicher abgelegt werden.

    Schau Dir mal das output von folgendem code an, da siehst Du warum man immer mit equals vergleichen muss.

    Code
    public class StringTests {
      public static void main(String[] args){		
        System.out.println("Hello".equals("Hello World".substring(0,5))); //=> true
        System.out.println("Hello" == "Hello World".substring(0,5)); //=> false
        System.out.println("Hello" == "Hello"); //=> true
        System.out.println("Hello".equals("Hello")); //=> true
      }	
    }


    Zu deinem eigentlichen Problem: Das wirst Du mit einfachem debugging leicht loesen koennen:

    Wenn Du so einen Code hast:

    Code
    ta_Ausgabe.setText(myCaesar.getCypher());

    und Du moechtest wissen, ob der Fehler in der TextArea oder in der getCypher methode liegt, ruf doch einfach zwei mal hintereinander die setText Methode aus und schau was nachher drinnen steht:


    Code
    ta_Ausgabe.setText("a");
    ta_Ausgabe.setText("b");
    
    
    System.out.println(ta_Ausgabe.getText());

    Jetzt weisst du, das es nicht die textarea sein kann. Also muss der fehler wohl im restlichen Code liegen:

    Code
    String s;
    s = myCaesar.getCypher()
    s = myCaesar.getCypher()
    System.out.println(s);

    Hier wird dann wohl auch nichts Unerwartetes passieren, denn deine getCypher methode laesst nicht viel Spielraum fuer Fehler. Logischer Schluss: Der Fehler liegt in deinem uebrigen code. Wo genau? Einfach den Algorithmus nachverfolgen nach jeder manipulation von cypher dessen Wert mit System.out.println aussgeben lassen. Dann weisst sehr schnell ganz genau wo dein Fehler liegt.

  • ich habe vergessen die Attribute vorher zu reseten bevor ich sie erneut verwende, dadurch kam es zur dopplung.


    Danke an alle


    Aber hier ein weiteres TEXTAREA Problem
    Diesmal mit Swing ^^

    Ich habe eine Methode die auf Primzahlen prüft. Durch ein textfield wird eine MAXZAHL ausgelesen bis zu der alle Zahlen geprüft werden.
    Ein TEXTAREA gibt dann nur alle Primzahlen aus.
    Ich habe zusätzlich eine ProgressBar implementiert.
    Das Problem:
    Ich lasse nach jeder Zahl den Fortschritt berechnen (Zahl/Maxzahl*100) und gebe das an die Prog.Bar weiter.
    Wenn ich jetzt den Button drücke dann bleibt die Progressbar bis zum schluss auf 0% und geht dann auf 100%.
    Das Textarea ist auch die ganze Zeit LEER bis zum schluss und gibt dann erst aus obwohl ich immer wieder Primzahlen appende wenn sie auftauchen.
    Ich denke Mal ein Code hilft hier mehr:



    Versteht jemand mein Problem und kann mir helfen?
    Alles was ich will ist, dass er nicht alles am Ende darstellt sondern kontinuierlich auffüllt.

  • Threading heisst das Zauberwort.

    Du musst die Primzahlenberechnung in einem eigenen Thread machen, von dort wird dann auch die Progressbar sowie die Ausgabe-Textarea geupdatet.

    Wenn du das ohne eigenem Thread machst, dann friert das GUI ein.

    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  • Ich glaube nicht das ich das alleine bewerkstelligt bekomme, da ich sowas noch nie gemacht hab. Vielleicht könnten wir es gemeinsam hinbekommen ;) :D




    Würde mich sehr freuen.

  • Zitat von Nicholas1991

    Ich meine generell wie man solch einen Thread erzeugt und wie er aufgebaut sein muss?

    Meiner Erfahrung nach lernt man solche Grundlagen besser aus Buechern, und benutzt Foren wie dieses zur weiteren Recherche.

    Natuerlich kann ich dir jetzt einen Essay ueber Java Threading schreiben, aber ich wuerde ja nur wiederholen was schon zig andere vor mir geschrieben haben.

  • Threads sind im Prinzip ganz simpel:

    Prinzipiell schreibt man sich eine Thread Klasse, entweder man erweitert die Klasse Thread oder man implementiert das Interface Runnable. Dann muss man noch in der Klasse die run-Methode implementieren. Alles in dieser Methode wird als paralleler Thread ausgeführt.

    Der Thread wird dann gestartet durch

    Code
    Thread t = new Thread (new ServerThread());
    t.start();

    Mehr dürftest du eigentlihc nicht brauchen

    Paddys, hm.....

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!