Toon posts:

[Java] problemen met inputmap

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben van plan een textcomponentje te maken waar enkel een beperkt aantal toetsen kan worden ingevoerd (bijvoorbeeld enkel cijfers ofzo)
hoe kan ik de inputmap leegmaken, of moet dit op een andere manier
in ieder geval als ik de keys() methode (om ze daarna door te geven aan de remove method) oproep krijg ik een lege array KeyStroke door

iemand een ideetje?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Als je swing gebruikt moet je kijken het model van de component (in het geval van een textcomponent zal dat de Document zijn). Hierin kan je valideren of het toegevoegd/verwijderde correct is.

Verwijderd

Topicstarter
en hoe kan ik dan ervoor zorgen dat er geen enkele keystroke nog werkt op een jtextcomponent?

  • CyBoB
  • Registratie: Januari 2001
  • Laatst online: 24-12-2025

CyBoB

.::BURB::.

Verwijderd schreef op 29 December 2002 @ 18:15:
en hoe kan ik dan ervoor zorgen dat er geen enkele keystroke nog werkt op een jtextcomponent?
gewoon de insertString() van het document overriden en verder helemaal niets laten doen :?

insertString() heeft nog wel wat argumenten, maar die weet ik niet uit mijn hoofd :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 29 December 2002 @ 18:15:
en hoe kan ik dan ervoor zorgen dat er geen enkele keystroke nog werkt op een jtextcomponent?
Dat document word aangeroepen als er een toets is ingedrukt. Jij kan deze methode afluisteren (je zou kunnen extenden - jekkie of wrappen - beter) en jij kan dan kiezen of jij dat bericht naar het 'echte' document doorsteurt, of dat jij gaat beepen.

vb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class BeepDocument implements Document{
    private Document _doc;

    public BeepDocument(Document doc){_doc = doc;}

    public void insertString(String s, int offset, ...){
         if(lieveString(s))
             _doc.insertString(s,...);
         else
             beep();
    }

    ...
}


Je zou er zelfs voor kunnen kiezen om een goedkeurings strategy object mee te geven zodat je dit document kan hergebruiken. (Strategy = Functie gewrapped in een object : nodig omdat java geen hogere orde functies ondersteunt: functie als parameter dus).

[ Voor 17% gewijzigd door Alarmnummer op 29-12-2002 18:57 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik ben zelf nog even bezig geweest met zo`n generieker document waar je een goedkeuringsobject aan kan toevoegen. Het enigste probleem wat ik heb is dat ik niet kan zorgen dat het gewrapte document niet naar buiten lekt. Dit komt doordat ik de DocumentEvent niet kan aanpassen, en hierin zit het orginele document. Hierdoor kunnen er ongecontroleerde bewerkingen plaats vinden. Dit moet dan maar in de documentatie komen te staan.

Verder kan heb ik dit
code:
1
2
3
4
5
interface DocumentValidator{
   boolean validateInsertString(int offs, String str, AttributeSet a, Document d);
    
   boolean validateRemove(int offs, int len, Document d);
}

Als goedkeurings object en mbv een adapter kan dit:
code:
1
2
3
interface CharValidator{
   boolean validate(char c);
}

Worden gebruikt om chars te controleren.

[ Voor 4% gewijzigd door Alarmnummer op 30-12-2002 11:48 ]

Pagina: 1