Avatar billede _carsten Nybegynder
05. januar 2003 - 19:42 Der er 15 kommentarer og
1 løsning

JTextField har ændret værdi

Hvordan registrerer man at et JTextField har ændret værdi

Eks.: En knap ændrer feltets værdi fra 'A' til 'B',
      derefter følger en eventuel handling, afhængig af
      værdien i feltet.

Carsten
Avatar billede casualty Nybegynder
05. januar 2003 - 19:52 #1
Knappen laver noget og afslutter med at vise en eller anden værdi i et tekstefelt...Kan du ikke få den til at handle ud fra denne værdi inden at det sættes i tekstfeltet??

Mvh Casualty
Avatar billede casualty Nybegynder
05. januar 2003 - 19:55 #2
void minKnap_actionPerformed(ActionEvent e)
{
//her sættes en værdi i tekstfeltet
//Her gør den noget med værdien
}
Avatar billede casualty Nybegynder
05. januar 2003 - 19:58 #3
Det jeg mener, er at hvis det er knappen der ændrer værdien i dit JTextField, så kan det jo ligesågodt også være knappen der sætter en handling igang ud fra værdien...

Mvh Casualty
Avatar billede casualty Nybegynder
05. januar 2003 - 19:58 #4
Svar
Avatar billede bearhugx Nybegynder
05. januar 2003 - 20:06 #5
Hmm Du kan holde øje med om indholdet i dit JTextField er ændret ved at add'e en ActionListener
Avatar billede _carsten Nybegynder
05. januar 2003 - 20:25 #6
Casulty>  Det kunne jeg måske, men jeg er kun interesseret i den 'gamle' o
          'nye' værdi i textfeltet.

bearhugx> Virker ikke kun ved tastetryk i feltet ????

Skal man ikke arbejde sig henimod noget med ChangeListener  ???
Jeg ved bare ikke lige hvordan man bruger den !

PS: Undskyld at jeg sad og halvsov !!
Carsten
Avatar billede bearhugx Nybegynder
05. januar 2003 - 20:28 #7
Her er en mere rafineret version :

{
  JTextField txtInput = new JTextField();
  txtInput.getDocument().addDocumentListener( new TextChangedListener(this) );

  ....
  public void doStuffOnChange() {
    // her sker, hvad der skal ske, når indholdet i txtInput ændrer sig...
  }

}

public class TextChangedListener implements DocumentListener {
  Object adaptee;
  public TextChangedListener(Object adaptee) {
  this.adaptee = adaptee;
  }

  public void changedUpdate(DocumentEvent de) {
    adaptee.doStuffOnChange();
  }
}
Avatar billede bearhugx Nybegynder
05. januar 2003 - 20:30 #8
Her er en mere rafineret version :

{
  JTextField txtInput = new JTextField();
  txtInput.getDocument().addDocumentListener( new TextChangedListener(this) );

  ....
  public void doStuffOnChange() {
    // her sker, hvad der skal ske, når indholdet i txtInput ændrer sig...
  }

}

public class TextChangedListener implements DocumentListener {
  Object adaptee;
  public TextChangedListener(Object adaptee) {
  this.adaptee = adaptee;
  }

  public void changedUpdate(DocumentEvent de) {
    adaptee.doStuffOnChange();
  }
}
Avatar billede bearhugx Nybegynder
05. januar 2003 - 20:32 #9
Suk .. det er hvad, der sker, når eksperten lagger, og man så trykker en ekstra gang :-/
Avatar billede bearhugx Nybegynder
05. januar 2003 - 20:33 #10
ActionListener --> Action bliver åbenbart kun affyret når der trykkes ENTER ;-/
Avatar billede arne_v Ekspert
05. januar 2003 - 20:53 #11
Jeg er enig med Casualty - det er langt nemmere at lade den kode
der opdaterer feltet også lave det øvrige.

ActionListener er kun løsningen hvis det er direkte bruger input.
Avatar billede _carsten Nybegynder
05. januar 2003 - 21:18 #12
Så lad os i dette tilfælde sige, at det er brugerinput som ændrer værdien i feltet.

Er det så bearhugx's forslag som er løsningen ???
Avatar billede _carsten Nybegynder
05. januar 2003 - 22:32 #13
bearhugx

Hvad menes med 'adaptee'

Jeg kan se, at det er dit forslag jeg skal bruge, kan bare ikke få det til at virke, kigger videre imorgen.

Carsten
Avatar billede bearhugx Nybegynder
06. januar 2003 - 18:02 #14
_carsten >> har du fået det til at virke... ???

Takker for points, men vil lige sikre mig, at mit forslag også er løsningen -- Det er nemlig ikke aftestet selv (har ikke haft tid...)
Avatar billede _carsten Nybegynder
06. januar 2003 - 22:24 #15
Tak - tak - tak, det virker, ideen var super !!

Jeg måtte modificere det lidt, kunne ikke rigtig få dit til at virke,
men du fik sat mig ind på det rigtige spor.

Her en lille ide om hvordan det ser ud hos mig.

    feltXX.getDocument().addDocumentListener(new MyDocumentListener());

    class MyDocumentListener implements javax.swing.event.DocumentListener {

        public void changedUpdate(javax.swing.event.DocumentEvent de) {
            doStuff();
        }
   
        public void insertUpdate(javax.swing.event.DocumentEvent de) {
            doStuff();
        }
   
        public void removeUpdate(javax.swing.event.DocumentEvent de) {
            doStuff();
        }
    }
   
   
   
    public void doStuff(){
        String s = feltXX.getText();
    }
Avatar billede bearhugx Nybegynder
06. januar 2003 - 23:46 #16
Hmmm... Ja, og du slipper helt for Adaptor/adaptee-problematikken ved at lave klassen intern ... Se, så langt havde jeg jo ikke tænkt den :-)

Adaptee == den klasse, som bruger en Adapter...

Det glæder mig, at du har fået det til at virke :-)
/Søren
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester