Textlänge anzeigen

brauni18

Mitglied
Hallo ich hab ein Programm geschrieben das die Länge eines Textes anzeigen soll und zwar in einer swing form mit einem textfeld und einem button und der button soll das ganze aktivieren...ich hab dafür extra vorher ne klasse in nem Paket erstellt in die ich die funktionen einbauen will:

Java:
package Texte;

/**
 *
 * @author User
 */
public class Checktext {
    public String text;

   public Checktext(String s){
        text=s;
    }

   public int laenge=text.length();

}


Das ist das Hauptprogramm. Aber das ganze funktioniert nicht, ich denke es liegt an Zeile 71
Kann mir bitte jemand helfen?..Ich fang grade erst mit Java an und versuch durch kleine Übungen Erfahrungen zu sammeln

Java:
/*
 * NewJFrame.java
 *
 * Created on 21.05.2010, 12:31:48
 */
import Texte.Checktext;
/**
 *
 * @author User
 */
public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("TextPrüfung");

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jTextField1.setText("jTextField1");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(30, 30, 30)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 270, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(132, 132, 132)
                        .addComponent(jButton1)))
                .addContainerGap(37, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(43, 43, 43)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(61, 61, 61)
                .addComponent(jButton1)
                .addContainerGap(61, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
           String s= jTextField1.getText();
          Checktext t= new Checktext(s);
           int l=t.laenge;
           jTextField1.setText(""+l);
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
                
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration

}
 
Zuletzt bearbeitet:
> Aber das ganze funktioniert nicht

was erwartest du denn wie es funktionieren soll?
soll dir der Texteditor die richtige Antwort ausgeben, welche auch immer das ist?
kannst du das Programm kompilieren?
kannst du das Programm starten?
erscheint eine GUI?
kannst du etwas eintippen?
usw.
erzähl doch einfach ganz genau was passiert und was eben in welchem Schritt nicht passiert,
welche falschen Ausgaben, welche Fehlermeldungen erscheinen, und alles weitere wichtige..
 
Hi, der Fehler liegt hier
Java:
   public int laenge=text.length();

Das wird nur einmal, bei der Erzeugung des Objekts vom Typ Checktext ausgeführt. Und zwar wenn der String noch leer ist -> also null.

Besser machst du die Klasse Checktext so:
Java:
public class Checktext {

    private String text;

    public Checktext(String s) {
        text = s;
    }

    public int getLenght() {
        return text.length();
    }
}
und gibst das dann so aus:
Java:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        Checktext t = new Checktext(jTextField1.getText());
        jTextField1.setText("" + t.getLenght());
    }
 
Noch ein Tipp: Man kann im Netbeans GUI Editor auch die Komponenten sinnvoll benennen.
Dazu einfach im Inspector Fenster die entsprechende Komponente auswählen und dann umbenennen (F2).
 
du kannst auch einfach die Varibale bei text bekannt geben und dann im Konstruktor
dann einfach
Java:
public class Checktext {
 
    private String text;
    private int laenge = 0;
 
    public Checktext(String s) {
        text = s;
        laenge = text.length();
    }

kannste dann nachher mit der gettermethode wieder aufrufen.
 
Man beachte unter Anderem die folgenden, inspirierenden Zeilen von MarcB 😉
Java:
public int getLenght() {
    return text.length();
}
Sinnvoller, als etwas zu wrappen, was in diesem Kontext überhaupt keinen Sinn macht, wär, wenn man gleich einen Schreibfehler einbaut.
 
WOW..hätte nie gedacht dass so schnell die Anworten kommen

Vielen Dank das hat mir echt geholfen =)

@MarcB:
Ich wieso wird das denn nur einmal aufgerufen?...und ich hab doch als Parameter den gefüllten String mitgegeben oder?
 
Ich denke mal der TO will sich überhaupt erst mal beibringen wie man mit mehreren Klassen arbeitet.
Das die Klasse Checktext an sich keinen Sinn macht, sieht ja ein Blinder.

Edit:

Das feld length wird eben initialisiert, bevor das Feld text initialisiert wird.
Evtl. hilft dir folgendes Beispiel:
Java:
public class Bla {

    private String test1 = "Hallo";
    private String test2;

    public Bla(String string) {
        System.out.println(test1); //Den gibts schon
        System.out.println(test2); //Der ist noch null
        this.test2 = string; //jetzt gibts den auch
    }

    public static void main(String... args) {
        new Bla("Welt");
    }
}
 
Zuletzt bearbeitet:

Zurück
Oben