JTextField Eingabe verbergen

Status
Nicht offen für weitere Antworten.

aze

Bekanntes Mitglied
Hi

Wie schaffe ich es,dass in einen JTextField eingegebene Zeichen verborgen bleiben ?

Beispiel: Ich habe ein JTextfield in dem ein Datum steht ,z.b 15.7.09.Durch eine bestimmte Tastenkombination wird das Datum verändert,zb durch "+ 2 d" wird das Datum auf dem 17.7.09 gsetzt.Das funktioniert auch.Ein KeyAdapter "berechnet" das neue Datum und setzt den Text mit "setText(...)" neu.Allerdings sieht man dann immer noch das d an dem Datum kleben.Die Anzeige ist "17.7.09d".
getText() gibt jedoch "17.7.09" aus.Um das zu verhindern möchte ich nun das bestimmte zeichenkombinationen im JTextfield wie eben das genannte "+ 2 d" nicht angezeigt werden.Wie mache ich das ?

Schöne Grüße

aze
 
G

Gast2

Gast
keinen KeyAdapter nehmen sondern einen DocoumentenListener Bsp siehst du in der FAQ.
 

André Uhres

Top Contributor
Versuch's mal mit einem eigenen Document. Beispiel:
Java:
...
public class NewJFrame extends JFrame {
...
        jTextField1.setDocument(new MyDocument());
...
    class MyDocument extends PlainDocument {

        private boolean special;
        private String specialString;

        @Override
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
            if (str.equals("+")) {
                special = true;
                specialString = "";
            }
            if (!special) {
                super.insertString(offs, str, a);
            } else {
                specialString += str;
            }
            if (special && str.equals("d")) {
                special = false;
                update(jTextField1, specialString); 
            }

        }
        private void update(JTextField tf, String code){
            //TODO
            System.out.println(code);
        }
    }
}
 

aze

Bekanntes Mitglied
Ich hab jetz meine eigene document Klasse geschrieben :

Java:
public class  CharcterDocument extends PlainDocument
	{
		
		
		private static final long serialVersionUID = -68370924938455019L;

		
		
		
		@Override
		public void insertString(int offs, String str, AttributeSet a) throws BadLocationException 
		{	
			
			
			if(str.equals("."))
				super.insertString(offs, str, a);
			
			try 
			{
				Integer.parseInt(str);
			}
			catch (Exception ex)
			{
				return ;
			}
			
			super.insertString(offs, str, a);
			
		}

Und sie dann dem Textfield hinzugefügt mit :

textField.setDocument( new CharcterDocument());

Das TextField bleibt darufhin jedoch leer

Selbst wenn ich dies schreibe passiert der gleiche Effekt:

Java:
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException 
		{super(offs,str,a)};

Was mach ich falsch ?
 
Zuletzt bearbeitet:

aze

Bekanntes Mitglied
Upps,ich meinte ja super.insertString(offs,str,a) nicht den Konstruktor
 

aze

Bekanntes Mitglied
Ich hatte vergessen zu erwähnen ,dass mein JTextField zu einen JSpinner gehört.Bei einen reinen JTextField funktioniert es.Nur bei einen JTextField eines JSpinners nicht
 

Ebenius

Top Contributor
Upps,ich meinte ja super.insertString(offs,str,a) nicht den Konstruktor
Und das Semikolon muss vor die geschweifte Klammer. :)

Ich hatte vergessen zu erwähnen ,dass mein JTextField zu einen JSpinner gehört.Bei einen reinen JTextField funktioniert es.Nur bei einen JTextField eines JSpinners nicht
Ach doch eine Kleinigkeit vergessen? :eek: Ist auch kein JTextField, sondern ein JFormattedTextField.

Du könntest es so lösen:
Java:
final JSpinner spinner = new JSpinner(new SpinnerDateModel());
final DateEditor editor = (JSpinner.DateEditor) spinner.getEditor();
final JFormattedTextField tf = editor.getTextField();

final InputMap im = tf.getInputMap();
im.put(KeyStroke.getKeyStroke('+'), "startModulation");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false),
      "stopModulation");
final ActionMap am = tf.getActionMap();

am.put("startModulation", new AbstractAction() {

  public void actionPerformed(ActionEvent e) {
    final JComponent src = (JComponent) e.getSource();
    src.putClientProperty("modulation", Boolean.TRUE);
  }
});
am.put("stopModulation", new AbstractAction() {

  public void actionPerformed(ActionEvent e) {
      // TODO: process recorded modulation sequence
    final JComponent src = (JComponent) e.getSource();
    src.putClientProperty("modulation", Boolean.FALSE);
  }
});

tf.addKeyListener(new KeyAdapter() {

  @Override
  public void keyTyped(KeyEvent e) {
    final JComponent c = (JComponent) e.getSource();
    if (Boolean.TRUE.equals(c.getClientProperty("modulation"))
          && e.getKeyChar() != 0) {
      // TODO: record modulation sequence
      e.consume();
    }
    super.keyPressed(e);
  }
});
Bei den beiden TODOs musst Du noch arbeiten. Das zweite TODO sollte die abgefangenen Events auswerten und aufzeichen, das erste TODO sollte dann die jeweilige Aktion ausführen. In diesem Fall beendet sich der Modulationsmodus mit Druck auf ENTER. Wenn Du das anders willst, musst Du's ggf. ändern; ist nur ein Test gewesen.

Hilft Dir das?

Ebenius
 
Zuletzt bearbeitet:

aze

Bekanntes Mitglied
Ich hab jetzt einen anderen Anstz gefunden ,aber totzdem noch ein Problem.

Ich benutze einen MaskFormatter.Der funktioniert auch ganz gut.Leider ergibt sich folgendes Problem:

Ich erstelle ein jFormattedTextField:

Java:
_eingabe = new JFormattedTextField( new DateFormatter(DateFormat.getDateInstance (DateFormat.SHORT, Locale.GERMAN)))

und installiere dann einen MaskFormatter :

Java:
try 
		  {
			new MaskFormatter("##.##.##").install(_eingabe);
		  } 
		  catch (ParseException e)
		  {
			
			e.printStackTrace();
		  }

Der MaskFormatter sorgt dafür ,dass der Benutzer keinen Mist eingeben kann und das FormattedTextField dafür ,dass das Datum auch stimmt.Allerdings klappt das nur einmal .Nach der ersten Korrektur funktioniert der MaskFormatter nicht mehr.
 

Ebenius

Top Contributor
Unglaublich, Du gehst ja nichtmal auf meinen Lösungsvorschlag ein.

Bzgl. Zeile 3: Das macht man nicht. Man setzt dem JFormattedTextField den Formatter (oder eine FormatterFactory): [java=3]_eingabe.setFormatter(new MaskFormatter("##.##.##"));[/code]
Ebenius
 

aze

Bekanntes Mitglied
Doch ,das hab ich auch versucht ,aber das hat nicht funktioniert.

Ich hab den MaskFormatter erst auch so gesetzt ,aber das hat dann nicht den Effekt den ich haben möchte,nämlich das bei der Eingabe der MaskFormatter guckt ob keine Buchstaben eingegeben werden und beim Verlassen der Eingabe das TextFormattedField überpüft ob die Eingabe stimmt und gegebenfalls korrigiert.
 

Ebenius

Top Contributor
1. Ganz sicher funktioniert der Code oben. In eine [c]main()[/c]-Methode kopieren, ausführen, läuft.

2. Das was Du oben machst kann aber nicht funktionieren. Du willst zwei Formatter auf einem JFormattedTextField benutzen. Das kann aber nur mit einem spielen. Bau Dir einen Formatter, der auf die beiden anderen weiterleitet und installiere in so, wie ich zwei Posts weiter oben geschrieben habe.

Ebenius
 

aze

Bekanntes Mitglied
1. Ganz sicher funktioniert der Code oben. In eine [c]main()[/c]-Methode kopieren, ausführen, läuft.

Hmm,hab ich wohl was falsch gemacht ,sorry.

2. Das was Du oben machst kann aber nicht funktionieren. Du willst zwei Formatter auf einem JFormattedTextField benutzen. Das kann aber nur mit einem spielen. Bau Dir einen Formatter, der auf die beiden anderen weiterleitet und installiere in so, wie ich zwei Posts weiter oben geschrieben habe.

Ebenius

Wie meinst du das ? Was meinst du mit weiterleiten ? Installieren durch setFormatter ?
 

Ebenius

Top Contributor
Wie meinst du das ? Was meinst du mit weiterleiten ? Installieren durch setFormatter ?
Nein. Durch diese Zeile installierst Du den DateFormatter:
Java:
new JFormattedTextField( new DateFormatter(DateFormat.getDateInstance (DateFormat.SHORT, Locale.GERMAN)))
Damit hat das JFormattedTextField einen Formatter, mehr kann es nicht. Wenn Du zwei Formatter brauchst, dann musst Du wohl oder übel selber einen schreiben, der an die beiden anderen delegiert.

Wie auch immer, dieser Weg wird wahrscheinlich nicht sehr weit führen. Die JFormattedTextField-Klasse ist dafür da, mit einem Formatter String <=> Value-Konvertierung durchzuführen. Wenn Dir die Standards nicht ausreichen, dann schreib Dir einen eigenen Konverter, der Deinen Ansprüchen genügt.

Wenn Du noch immer nur Zeichen nicht ins Dokument lassen möchtest, weil sie nur Kontrollsequenzen sind, ist mein Lösungsansatz oben eher der richtige.

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
G JTextField Eingabe in DB speichern AWT, Swing, JavaFX & SWT 68
R jTextField Eingabe überprüfen AWT, Swing, JavaFX & SWT 2
C Swing JTextfield hängt sich bei Eingabe auf AWT, Swing, JavaFX & SWT 6
R JTextField Eingabe bestimmen AWT, Swing, JavaFX & SWT 5
M Swing Eingabe auf JTextField automatisch ausgeben auf JLabel AWT, Swing, JavaFX & SWT 2
N Eingabe JTextfield überprüfen AWT, Swing, JavaFX & SWT 3
J Eingabe im JTextField übermitteln AWT, Swing, JavaFX & SWT 6
P Swing Einfache Eingabe in JTextfield wird nicht ausgegeben AWT, Swing, JavaFX & SWT 3
B Eingabe von JTextField verwenden AWT, Swing, JavaFX & SWT 10
U Swing Eingabe von JTextField in einen String übergeben. AWT, Swing, JavaFX & SWT 3
A Die Eingabe in einem JTextField beschränken AWT, Swing, JavaFX & SWT 5
R JTextField Eingabe speichern AWT, Swing, JavaFX & SWT 4
hdi JTextField - Eingabe verschlüsselt anzeigen AWT, Swing, JavaFX & SWT 2
M jTextField mit Eingabe beschränken AWT, Swing, JavaFX & SWT 4
S JTextField - Eingabe speichern AWT, Swing, JavaFX & SWT 2
V JTextField - Mehrfachselektion und Eingabe möglich? AWT, Swing, JavaFX & SWT 2
I Prüfen einer Eingabe in JTextField, Fokusverlust AWT, Swing, JavaFX & SWT 2
C JTextField Eingabe prüfen AWT, Swing, JavaFX & SWT 4
L JTextField verweigert die Eingabe AWT, Swing, JavaFX & SWT 6
M JTextField nach erfolgreicher Eingabe leeren? AWT, Swing, JavaFX & SWT 2
Z immer Problem mit Eingabe durch JTextField und JTree AWT, Swing, JavaFX & SWT 7
J JTextfield Eingabe einschränken AWT, Swing, JavaFX & SWT 4
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
I JTextfield senden über Enter AWT, Swing, JavaFX & SWT 1
H Swing Wie Fokus von JTextField entfernen? AWT, Swing, JavaFX & SWT 9
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
G JTextField Änderungen überprüfen AWT, Swing, JavaFX & SWT 4
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
R Swing JTextField nicht-kopierbarer Text AWT, Swing, JavaFX & SWT 1
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
xYurisha Gui Focus von JTextField weglenken AWT, Swing, JavaFX & SWT 6
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Wert in JTextField wird falsch ausgegeben AWT, Swing, JavaFX & SWT 2
D Inhalt von JTextField in MySQL speichern. Wie ? AWT, Swing, JavaFX & SWT 1
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
J 100% CPU Last mit JTextField AWT, Swing, JavaFX & SWT 2
U Swing JTextField aus dem Editmodus nehmen AWT, Swing, JavaFX & SWT 1
Q-bert JTextField per Mausklick einfügen AWT, Swing, JavaFX & SWT 3
L JTextField erscheint erst nach Veränderung der Framegröße AWT, Swing, JavaFX & SWT 5
BobbGott durchsichtiges JTextField mit Hintergrund AWT, Swing, JavaFX & SWT 12
L Swing JTextField nicht sichtbar AWT, Swing, JavaFX & SWT 1
Soloeco Swing JTextField auslesen Klassen übergreifend AWT, Swing, JavaFX & SWT 16
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
T ActionListener nimmt JTextField nicht mehr an. AWT, Swing, JavaFX & SWT 2
N Swing Jtextfield und Ausgabe von Wärungsbeträgen AWT, Swing, JavaFX & SWT 3
beatles Swing JTextField - Game Status aus Array anzeigen AWT, Swing, JavaFX & SWT 3
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
T JTextField Array im JPanel wird nicht komplett angezeigt AWT, Swing, JavaFX & SWT 7
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
Tausendsassa Text changed event handler jTextField AWT, Swing, JavaFX & SWT 3
B jTextfield Übergabe des Strings AWT, Swing, JavaFX & SWT 16
P JTextField unsichtbar machen AWT, Swing, JavaFX & SWT 2
G .txt-Datei einlesen /formatieren in JTextfield ?? AWT, Swing, JavaFX & SWT 8
C Swing JTextField Funktion zuweisen - Löschen von Buchstaben/Sonderzeichen AWT, Swing, JavaFX & SWT 6
S JTextField parameter unveränderlich AWT, Swing, JavaFX & SWT 9
T bekomme keinen Focus auf JTextField AWT, Swing, JavaFX & SWT 3
N Cursor im JTextField AWT, Swing, JavaFX & SWT 6
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
A JTextField und JButtons AWT, Swing, JavaFX & SWT 2
T jTextField mit String befüllen AWT, Swing, JavaFX & SWT 1
O JTextfield wird über'drawed'.. AWT, Swing, JavaFX & SWT 6
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
S Bekomme bein Buttonklick das Jtextfield nicht ausgegeben AWT, Swing, JavaFX & SWT 8
Seikuassi Swing JTextField nimmt kein Einfügen (Strg+V) an AWT, Swing, JavaFX & SWT 4
Z Fenster leer, wenn ich ein JTextField erzeuge AWT, Swing, JavaFX & SWT 3
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
B Swing JTextField mit Bildschirmauflösung skalieren lassen. AWT, Swing, JavaFX & SWT 4
C Geloest: JTextfield: Titel automatisch entfernen, sobald Text eingegeben wird AWT, Swing, JavaFX & SWT 1
T Internes Event-handling in TextField/JTextField AWT, Swing, JavaFX & SWT 2
T AWT JTextfield verschwindet AWT, Swing, JavaFX & SWT 10
dat_vin KeyEvent jTextField AWT, Swing, JavaFX & SWT 12
C JTextfield ohne Enter feuern AWT, Swing, JavaFX & SWT 8
W Swing JTextField nur für Integer AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
F Swing JTextField (unbeschriebbar machen) AWT, Swing, JavaFX & SWT 12
W JTextfield - Wert lässt sich nicht setzen AWT, Swing, JavaFX & SWT 3
TheJavaKid JTextField: Reine Domain herausfiltern, sonst Inhalt löschen AWT, Swing, JavaFX & SWT 1
R Swing User tippt in unsichtbares JTextField AWT, Swing, JavaFX & SWT 3
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
U Swing JTextField zur Laufzeit auf Eingaben prüfen AWT, Swing, JavaFX & SWT 0
X Swing JTextField AWT, Swing, JavaFX & SWT 4
M Swing JTextField nicht ausfüllbar AWT, Swing, JavaFX & SWT 8
C Problem mit JTextField AWT, Swing, JavaFX & SWT 4
S Swing WYSIWYG JTextField AWT, Swing, JavaFX & SWT 2
vodkaz JTextField && Strings AWT, Swing, JavaFX & SWT 2
R Swing JScrollBar mit JTextField koppeln AWT, Swing, JavaFX & SWT 3
A Swing 2 JSlider verknüpfen und mit einem JTextField vergleichen, dann Ausgabe AWT, Swing, JavaFX & SWT 5
X JTextField Ausgabe klappt nicht AWT, Swing, JavaFX & SWT 4
S Swing Verzeichnis/Datei-Pfad in JTextField schreiben AWT, Swing, JavaFX & SWT 2
R Swing JTextField getText() liefert leeren String AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben