Her er et eksempel på hvordan det kan virke. Det er en applet med et textfield og et TextArea som statusbar). Hvis du vil ændre antallet af bogstaver kan det gøres ved at ændre MAXCHARS
public class TestApplet extends Applet implements KeyListener { public static final int MAXCHARS = 8; //Kan ændres TextField t; TextArea display; public void init() { t = new TextField(20); add(t, BorderLayout.NORTH); t.addKeyListener(this);
display = new TextArea(12,50); add(display, BorderLayout.CENTER); }
public void keyPressed(KeyEvent e) { if (e.getSource().equals(t)) { show(\"Length = \" + t.getText().length()); int code = e.getKeyCode(); if ((code == KeyEvent.VK_DELETE)||(code == KeyEvent.VK_BACK_SPACE)) { t.setEditable(true); show(\"Enabled\"); } else if (t.getText().length() >= MAXCHARS) { t.setEditable(false); show(\"Disabled\"); } } }
public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){}
public void show(String s) { display.append(s + \"\\n\"); display.setCaretPosition(display.getText().length()); }
Det er meningen at man altid skal kunne skrive i feltet, bare man ikke kommer over maks. grænsen. Med setEditable kan man da ikke skrive i det bagefter.
Jeg kunne godt tænke mig at lave det samme på 3 forskellige textfields i samme skærm. Disse textfields har alle forskellige grænser.
Problemet ligger nu i at når jeg har fyldt et field ud til grænsen, så kan jeg ikke skrive i de to andre. Med det samme jeg prøver at skrive noget bliver Editable sat til false på dem, dette kan jeg selvfølgelig fjerne med backspace, men jeg kan stadigvæk ikke skrive i field\'et.
FLOT, jeg er vist ved at være lidt træt. Fejlen skylds at jeg stadigvæk tjekkede på det en af field\'ene når jeg skulle skrive i dem. Dette er nu ordnet.
Men jeg har et meget lille spørgsmål, idet dem jeg laver programet for godt kan være lidt krakielske. Når field\'ets editable er false, skal man trykke 1 gang for at ændre editable til true, derefter skal man trykke endnu 1 gang for at slette et tegn, kan denne operation ikke slås samme til en ?
I det forslag jeg lavede, virker det fint på min computer. Hvis der er 8 tegn i og man trykker backspace, bliver tegnet slettet. Er du sikker på at du bruger keyPressed() og ikke keyReleased() (eller keyTyped)?
Nej det var jeg ikke. Jeg var kommet til at bruge keytyped, men hvad er forskellige egenligt ?
Er Typed ikke når en et tegn et tastet, så er den jo også sluppet, hvilket efter min forståelse er Released. Til sidst er Pressed ikke når en tast er holdt nede.
KeyPressed er når du trykker tasten ned, keyReleased er når du slipper den. KeyTyped er når du trykker og slipper igen. Alle tre bliver kaldt når man trykker en tast, men grunden til at den kun virker med keyPressed er, at den på det tidspunkt endnu ikke har sendt kommandoen videre til TextField\'en, og derfor kan tastetrykket stoppes.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.