Archief - Java jformattedtextfields

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

bikkerss

Legacy Member
ik probeer een datum veld te crieeren met vaste invoer.
jFormattedTextField1=new JFormattedTextField(new SimpleDateFormat("MM/dd/yy"));
maar hoe kan ik bij het verlaten van het textveld de invoer laten controlleren ?
ik heb een action aangemaakt zoals ik het zou doen bij een button maar dit werkt niet.

try
{
jFormattedTextField1=new JFormattedTextField(new SimpleDateFormat("dd/mm/yy"));

}
catch (Exception e)
{
JOptionPane.showInputDialog("Dit is geen geldig datumformaat, gebruik dd/mm/yy");
}

MilM

Legacy Member
bikkerss zei:
ik heb een action aangemaakt zoals ik het zou doen bij een button maar dit werkt niet.
Je moet de juiste listener gebruiken natuurlijk. Het is niet omdat een listener zoals ActionListener werkt bij een button, dat het dat ook zal doen in deze situatie.
bikkerss zei:
maar hoe kan ik bij het verlaten van het textveld de invoer laten controlleren ?

Om iets te doen bij het verlaten van een field, moet je een FocusListener gebruiken. Deze code zal dan getriggered worden wanneer iemand het veld verlaat.

Als je gebruik maakt van JFormattedTextField, dan kun je gebruik maken van de ondersteuning die al aanwezig is.

JFormattedTextField (Java 2 Platform SE v1.4.2)

bikkerss

Legacy Member
wel ik had het eerst geprobeerd met focuslost event maar daar gebeurde ook niets, is dit dan eveneens de foute ?

JoeriP

Legacy Member
Eventjes zelf uitgetest:

/**
* Created by IntelliJ IDEA.
* User: joeripeeters
* Date: 2-nov-2009
* Time: 20:26:11
* To change this template use File | Settings | File Templates.
*/
public class SwingTest {

public static void main(String[] args) {
SwingFrame frame = new SwingFrame();
}
}

import javax.swing.*;
import java.text.SimpleDateFormat;
import java.awt.event.FocusEvent;

/**
* Created by IntelliJ IDEA.
* User: joeripeeters
* Date: 2-nov-2009
* Time: 20:34:13
* To change this template use File | Settings | File Templates.
*/
public class SwingFrame {

public SwingFrame(){

// panel
JPanel panel = new JPanel();

// a button
JButton btn = new JButton("OK");

// Textfield
JFormattedTextField txtDate = new JFormattedTextField();
txtDate.setFocusable(true);
txtDate.setEnabled(true);
txtDate.setEditable(true);
txtDate.setSize(100,100);
txtDate.setValue("blablabla");

// add a focus listener
txtDate.addFocusListener(new MyFocusListener());

panel.add(txtDate);
panel.add(btn);

// frame
JFrame frame = new JFrame("Swinger de swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(640,480);

frame.add(panel);
frame.setVisible(true);
}
}


import java.awt.event.FocusListener;
import java.awt.event.FocusEvent;

/**
* Created by IntelliJ IDEA.
* User: joeripeeters
* Date: 2-nov-2009
* Time: 20:52:44
* To change this template use File | Settings | File Templates.
*/
public class MyFocusListener implements FocusListener {

public void focusGained(FocusEvent e) {
System.out.println("focus gained");
}

public void focusLost(FocusEvent e) {
System.out.println("focus lost");
}
}

Zo werkt het....

KO

Legacy Member
Parnakra zei:
En waar/wanneer roep je die methode aan?

Ik denk dat hij alleen het focus (en het verliezen daar van) principe wil demonstreren, niet het valideren zelf.

Parnakra

Legacy Member
=[KO]=;12419115 zei:
Ik denk dat hij alleen het focus (en het verliezen daar van) principe wil demonstreren, niet het valideren zelf.
Toen ik postte stond er enkel een focusLost methode, dus je kon niet weten of hij al een FocusListener had geïnitialiseerd/geïmplementeerd.

Maar met die (volledige) code van JoeriP zou het moeten werken.

Daggie

Legacy Member
Om input van JFormattedTextField te checken moet je een InputVerifier maken, die je bv. in FocusList laat verifyen.

Deze komt uit de API:
Code:
public class FormattedTextFieldVerifier extends InputVerifier {
    public boolean verify(JComponent input) {
        if (input instanceof JFormattedTextField) {
            JFormattedTextField ftf = (JFormattedTextField)input;
            AbstractFormatter formatter = ftf.getFormatter();
            if (formatter != null) {
                String text = ftf.getText();
                try {
                     formatter.stringToValue(text);
                     System.out.println("Geldige invoer");
                     return true;
                 } catch (ParseException pe) {
                	 System.out.println("Ongeldige invoer");
                     return false;
                 }
             }
         }
         return true;
     }
     public boolean shouldYieldFocus(JComponent input) {
         return verify(input);
     }
 }

Maken verifier: (anders ontbreekt er een stuk snippet)
Code:
final FormattedTextFieldVerifier verifier = new FormattedTextFieldVerifier();

En in je FocusLost:
Code:
verifier.verify(txtDate);

NeverwinterX

Legacy Member
Daggie zei:
Maken verifier: (anders ontbreekt er een stuk snippet)
Code:
final FormattedTextFieldVerifier verifier = new FormattedTextFieldVerifier();

En in je FocusLost:
Code:
verifier.verify(txtDate);
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan