Avatar billede Slettet bruger
03. maj 2008 - 12:00 Der er 8 kommentarer og
2 løsninger

Problem med Listeners

Jeg har oprettet et JTextField, som skal skifte farve efter hvilket tal, der står i det - f.eks. hvis der står "13", skal det blive gult og hvis der står "34", skal det blive rødt.

Til det formål har jeg lavet en "KeyListener", der tjekker tallet, hver gang man skriver i det. Det virker fint, men jer har også indsat en knap, der udfylder mit JTextField med et tilfældigt tal mellem 1 og 10.

Når man har trykket på knappen, bliver feltet udfyldt, men den skifter ikke farve, da man ikke selv har udfyldt det (altså trykket på tastaturet).

Jeg prøvet med "TextListener", men jeg kan ikke få det til at virke.

Nogen der har en idé? (Håber at spørgsmålet er forståligt!)
Avatar billede arne_v Ekspert
03. maj 2008 - 16:14 #1
Hvorfor ikke lade knap koden og din key listener begge kalde en metode som håndterer
farve ?
Avatar billede Slettet bruger
03. maj 2008 - 17:15 #2
Det havde jeg sådan set også tænkt mig, men i det fulde program kommer der til at være 10-20 knapper, der udfylder med tal og det kunne være smart, hvis det kunne gøres på en anden måde.
Avatar billede arne_v Ekspert
03. maj 2008 - 23:43 #3
Hvordan ser din ikke virkende TextListener kode ud ?
Avatar billede _carsten Nybegynder
04. maj 2008 - 12:13 #4
Lav en classe som extender JTextField, set et nyt Document, virker uanset hvordan teksten skrives (setText(), skives eller paste)
Nedenstående kræver prefix '-', men tilret selv





import java.awt.Color;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class MyJTextField extends JTextField {
   
    public MyJTextField(){
        setDocument(new MyDocument());
    }

    private class MyDocument extends PlainDocument {
        public MyDocument(){
        }

        public void insertString(int offs, String str, AttributeSet a)
                                            throws BadLocationException {
           
            super.insertString(offs, str, a);

            if(MyJTextField.this.getText().startsWith("-") )
                setForeground(Color.RED);
            else
                setForeground(Color.BLACK);
        }
    }
}
Avatar billede Slettet bruger
04. maj 2008 - 12:42 #5
Arne -> Jeg har slettet den, men den så sådan her ud:
(v1 er et "JTextField")

v1.addTextListener(new java.awt.event.TextListener() {
            public void textValueChanged(java.awt.event.TextEvent evt) {
                try
                {
                    int tal=Integer.parseInt(v1.getText());

                    if(tal>36 || tal<1) v1.setForeground(Color.BLACK);
                    else if(tal>=30) v1.setForeground(Color.RED);
                    else if(tal>=20) v1.setForeground(new Color(60,170,0));
                    else if(tal>=10) v1.setForeground(new Color(200,200,0));
                    else v1.setForeground(Color.BLUE);
                }
                catch(Exception e)
                {
                    v1.setForeground(Color.BLACK);
                }
            }
        });

carsten -> Jeg prøver
Avatar billede Slettet bruger
05. maj 2008 - 08:56 #6
Jeg fandt ud af, at "JTextField" ikke har en "addTextListener"-metode - Det er "TextField" (uden J), der har det. Tilgengæld har "JTextField" en "CaretListener".

"CaretListener" virker fint og skifter farven, uanset om den bliver skrevet, pastet eller sat ind med "setText(). Så hvis i begge lægger et svar, deler vi lige over.
Avatar billede arne_v Ekspert
06. maj 2008 - 04:23 #7
carsten I presume
Avatar billede Slettet bruger
06. maj 2008 - 14:36 #8
Jeg tænkte at i begge to lagde et svar (arne og carsten)
Avatar billede _carsten Nybegynder
06. maj 2008 - 17:44 #9
Svar
Avatar billede arne_v Ekspert
07. maj 2008 - 02:32 #10
ok
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