1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Java Textarea und Zeichenanzahl

  • Nicholas1991
  • 20. März 2007 um 18:51
  • Unerledigt
  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 20. März 2007 um 18:51
    • #1

    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

  • Paulchen
    1
    Paulchen
    Gast
    • 20. März 2007 um 18:54
    • #2
    Code
    textarea.getText().length()

    ?

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 20. März 2007 um 21:21
    • #3

    Hätte ich gewusst, dass das so einfach ist ^^.

    Ich probier es gleich mal aus.

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 19. April 2007 um 23:27
    • #4

    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

  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 20. April 2007 um 00:04
    • #5
    Zitat von Nicholas1991

    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.

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 21. April 2007 um 00:47
    • #6

    Hier ist mein Code

    Zitat

    public void btn_DecryptActionPerformed(ActionEvent evt) {
    String sCurrentValue = (String) cb_CryptType.getSelectedItem();
    if (sCurrentValue == "Caesar") {
    char [] c;
    c = ta_Eingabe.getText().toCharArray();
    int i = 0;
    i = (Integer.parseInt(tf_C_OffsetLetter.getText()));
    int i2 = 0;
    i2 = (ta_Eingabe.getText().length());
    myCaesar.encrypt(c, -i, i2);
    ta_Ausgabe.setText(myCaesar.getCypher());
    }

    Alles anzeigen



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

  • Homer
    10
    Homer
    Mitglied
    Reaktionen
    9
    Punkte
    1.079
    Beiträge
    210
    • 21. April 2007 um 13:07
    • #7

    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)

  • Paulchen
    1
    Paulchen
    Gast
    • 21. April 2007 um 13:12
    • #8
    Zitat von Homer

    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.

  • Homer
    10
    Homer
    Mitglied
    Reaktionen
    9
    Punkte
    1.079
    Beiträge
    210
    • 21. April 2007 um 13:49
    • #9

    ok, danke! hab ich nicht gewusst, da ich sowieso immer mit equals verglichen habe :grinning_squinting_face:

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

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 22. April 2007 um 00:37
    • #10
    Zitat von Paulchen

    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.

  • Homer
    10
    Homer
    Mitglied
    Reaktionen
    9
    Punkte
    1.079
    Beiträge
    210
    • 22. April 2007 um 09:18
    • #11

    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)

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 22. April 2007 um 09:41
    • #12
    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.

    lg, Benjamin Ferrari, bookworm.at

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 22. April 2007 um 22:10
    • #13

    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 :grinning_face_with_smiling_eyes:

    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:

    Zitat

    public void bt_StartPrimActionPerformed(ActionEvent evt) {
    ta_AusgabePrim.setText("Primzahlen von 2 bis "+tf_EingabePrim.getText()+":\n\n"+"2");
    int iZahl = 3;
    int iMax = Integer.parseInt(tf_EingabePrim.getText());
    do{
    if (istPrimzahl (iZahl) != false) {
    ta_AusgabePrim.append("\n"+iZahl);
    iZahl = (iZahl+1);
    }
    else {
    iZahl = (iZahl+1);
    }
    this.pb_ProgPrim.setValue(iZahl/iMax*100);
    }while (iZahl <= iMax);
    }

    Alles anzeigen



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

  • AntiBit
    13
    AntiBit
    Mitglied
    Reaktionen
    2
    Punkte
    1.712
    Beiträge
    297
    • 23. April 2007 um 14:50
    • #14

    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.

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 23. April 2007 um 20:46
    • #15

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




    Würde mich sehr freuen.

  • Nicholas1991
    9
    Nicholas1991
    Mitglied
    Punkte
    770
    Beiträge
    122
    • 26. April 2007 um 17:56
    • #16

    Hat denn niemand einen Ansatz?
    Ich meine generell wie man solch einen Thread erzeugt und wie er aufgebaut sein muss?


    M.f.G.

    Nicholas

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 26. April 2007 um 18:19
    • #17
    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.

    lg, Benjamin Ferrari, bookworm.at

  • jimbeam
    11
    jimbeam
    Mitglied
    Reaktionen
    11
    Punkte
    1.201
    Beiträge
    204
    • 30. April 2007 um 22:28
    • #18

    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.....

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung