[Java]MyJFormattedTextField extends JFormattedTextField

Pagina: 1
Acties:

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 13-11-2025
Ik zou graag mijn eigen implementatie maken van een JFormattedTextField. Nu heb ik al het een en ander geprobeerd maar mijn opzet is fout. Zouden mede tweakers een paar hints kunnen geven hoe ik dit zou moeten aanpakken?

Het doel is een met de eigen opzet van MyJFormattedTextField een aantal eigenlijkschappen (die meerdere malen gebruikt worden) vast te leggen. Hiervoor wil ik graag mijn eigenlijk component bouwen, welke ik later steeds kan hergebruiken.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:42

Creepy

Tactical Espionage Splatterer

En wat heb je dan al geprobeerd? Wat lukte daar niet mee? Kreeg je foutmeldingen? Zo ja, welke?

Aangezien je nu niet aangeeft wat je nu hebt geprobeerd en wat daar niet mee lukte lijkt het erop alsof je een kant en klaar voorbeeld wilt hebben hoe zoiets werkt, en dat is hier niet helemaal de bedoeling. Zie ook P&W FAQ - Het FAQ/Beleid topic en dan met name P&W FAQ - De "quickstart"

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 13-11-2025
Creepy schreef op woensdag 08 februari 2006 @ 17:16:
En wat heb je dan al geprobeerd? Wat lukte daar niet mee? Kreeg je foutmeldingen? Zo ja, welke?

Aangezien je nu niet aangeeft wat je nu hebt geprobeerd en wat daar niet mee lukte lijkt het erop alsof je een kant en klaar voorbeeld wilt hebben hoe zoiets werkt, en dat is hier niet helemaal de bedoeling. Zie ook P&W FAQ - Het FAQ/Beleid topic en dan met name P&W FAQ - De "quickstart"
Het is helemaal niet de bedoeling een kant en klare oplossing te krijgen. Ik wil alleen graag een paar tips hoe je zoiets aanpakt.

Ik heb tot nu toe een class geschreven die extends JFormattedTextField. Waarbij in geen argumenten meegeef aan de constuctor, de constructor maakt een MaskFormat aanzoals ik die wil grbruiken voor alle MyJFormattedTextField. Als ik nu met MyJFormattedTextField test = MyJFormattedTextField() een eigen MyJFormattedTextField aanmaak en deze plaats op een panel, Neemt deze de eigenschappen van de MaskFormat niet over. Terwijl als ik er een los JFormattedTextField aanmaak en aan deze vertel welk MaskFormat deze moet gebruiken dan werkt het wel. Ik zal wel een aantal dingen vergeten die belangrijk zijn voor de overerving. Daarom had ik de vraag gesteld voor om een aantal tips.

  • r5d
  • Registratie: Februari 2002
  • Niet online

r5d

Read more, write less...

Zonder code zijn we nergens :P Kun je misschien wat copy/pasten

Later betaal je meer, maar dan heb je wel een gratis datalimiet....


  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 13-11-2025
Hierbij dan wat code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter;

public class MyJFormattedTextField extends JFormattedTextField {
    
    public MyJFormattedTextField(){
        super();
        try {
            MaskFormatter formatter = new MaskFormatter("##:##");
            formatter.setPlaceholderCharacter('0');
            this.setFormatter(formatter);
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
    }
}

Dit is zoals ik verwacht dat het moest gaan werken.

Als ik met MyJFormattedTextField test = new MyJFormattedTextField(); de test toevoeg aan het panel dan heeft deze niet de zelfde eigenschappen zoals met onderstaande code:
Java:
1
2
3
4
5
6
7
        try {
            MaskFormatter formatter = new MaskFormatter("##:##");
            formatter.setPlaceholderCharacter('0');
            test = new JFormattedTextField(formatter);
        } catch (ParseException ex) {
            ex.printStackTrace();
        }

Met het bovenste stuk kan ik nog rustig tekens in het invul veld plaatsen. Terwijl dan niet kan met de manier zoals hierboven is beschreven. Het verschil is dus dat bij de bovenste manier er een MyJFormattedTextField wordt aangemaakt en met de onderste code wordt er een JFormattedTextField aangemaakt en toegevoegt aan de panel.

Ik zal vast een aantal andere methode moeten overschrijven. En heb de API goed doorgelezen. Maar kom er niet uit.

[ Voor 17% gewijzigd door Neptunus op 08-02-2006 17:51 ]


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 11-04 22:07
In je subklasse moet je dit:

Java:
1
this.setFormatter(formatter); 


Vervangen door dit:

Java:
1
this.setFormatterFactory(new DefaultFormatterFactory(formatter));


Nu moet ie het doen :)
Het staat ook zo in de API docs van JFormattedTextField voor de setFormatter methode:
You should not normally invoke this, instead set the AbstractFormatterFactory or set the value. JFormattedTextField will invoke this as the state of the JFormattedTextField changes and requires the value to be reset. JFormattedTextField passes in the AbstractFormatter obtained from the AbstractFormatterFactory.

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 13-11-2025
FallenAngel666 schreef op woensdag 08 februari 2006 @ 23:51:
In je subklasse moet je dit:

Java:
1
this.setFormatter(formatter); 


Vervangen door dit:

Java:
1
this.setFormatterFactory(new DefaultFormatterFactory(formatter));


Nu moet ie het doen :)
Het staat ook zo in de API docs van JFormattedTextField voor de setFormatter methode:


[...]
Inderdaad dit werkt goed. Ik had die opmerking ook gelezen maar niet begrepen denk ik. Maar het nis geen slecht idee op zelf een MyJFormattedTextField te schrijven voor dingen die steeds terug komen.
Pagina: 1