Avatar billede wollabella Nybegynder
29. august 2001 - 19:05 Der er 18 kommentarer

Event?

Hvordan laver man så hvis man har et TextField og nå brugeren klikker i det TextField så ændre den dens Value med setText(); ?????

Avatar billede ladyhawke Novice
29. august 2001 - 19:13 #1
brug mouselistener....
Avatar billede nico26 Nybegynder
29. august 2001 - 19:48 #2
det er nemmest at lave en inner-class der arver fra MouseAdapter

import java.awt.*;
import java.awt.event.*;

public class TestApp2 extends Frame {
  public static int WIDTH = 200;
  public static int HEIGHT = 200;

  public static void main(String args[]) {
    TestApp2 app = new TestApp2();
  }

  TextArea ta;

  public TestApp2() {
    super(\"TestApp\");

    setSize(WIDTH, HEIGHT);
    setLayout(null);

    ta = new TextArea();
    ta.setBounds(50, 50, 100, 100);
    ta.addMouseListener(new MouseHandler());
    add(ta);

    show();
  }

  public class MouseHandler extends MouseAdapter {
    public void mouseClicked(MouseEvent e) {
      ta.setText(\"mouse clicked \" + e.getX() + \", \" + e.getY());
    }
  }
}
Avatar billede nico26 Nybegynder
29. august 2001 - 19:53 #3
Avatar billede wollabella Nybegynder
29. august 2001 - 21:45 #4
kan man f.eks hvis man har flere TextArea\'s lave så nå man klikker på dem så bruger den MouseHandler og så i mousehandler laver den en if sætning

så hvis navnet på det \"trykket\" textfield er

test1 så skal den slette teksten
hvis det er test2 så skal den skrive hej osv osv !
Avatar billede ladyhawke Novice
29. august 2001 - 21:54 #5
ja, du kan få fat på den component som sender mouseClicked() med:
me.getComponent();

hvor me er det mouse event du fanger
Avatar billede ladyhawke Novice
29. august 2001 - 21:55 #6
husk at tilføje MouseListeners til alle de ønskede textfields/components
Avatar billede nico26 Nybegynder
29. august 2001 - 21:56 #7
Hvis du har flere, textareas laver du et instans per textarea, og tager textareaet med som parameter i constructoren

  public class MouseHandler extends MouseAdapter {
    TextArea ta;
    public MouseHandler(TextArea ta) {
      this.ta = ta;
    }

    public void mouseClicked(MouseEvent e) {
      ta.setText(\"mouse clicked \" + e.getX() + \", \" + e.getY());
    }
  }


og når du kalder assMouseListener:

ta1.addMouseListener(new MouseHandler(ta1));
ta2.addMouseListener(new MouseHandler(ta2));
ta3.addMouseListener(new MouseHandler(ta3));
Avatar billede ladyhawke Novice
29. august 2001 - 21:57 #8
Den konstruktion kan også fint bruges...
Avatar billede wollabella Nybegynder
29. august 2001 - 22:04 #9
kan du ikke forklare mig hvad den gør

public class MouseHandler extends MouseAdapter {
    TextArea ta;
    public MouseHandler(TextArea ta) {
      this.ta = ta;
    }

vil gerne kunne forstå mine kodeR! :)
Avatar billede nico26 Nybegynder
29. august 2001 - 22:27 #10
ta er bare en reference til den TextArea som handleren arbejder på.

Her opretter du en MouseHandler til ta1, og sender ta1 med som parameter:
ta1.addMouseListener(new MouseHandler(ta1));

så bliver MouseHandler\'s constructor udført, og gemmer referencen til ta1:
  public MouseHandler(TextArea ta) {
    this.ta = ta;
  }

Når så et mouseevent sker kan så udføre noget kode på den relevante TextArea, da man jo har gemt referencen


Avatar billede wollabella Nybegynder
30. august 2001 - 09:52 #11
Hvad så hvis man vil gøre det med textfields istedet...
eller både textarea og textfrields ..


hvad skal man så skrive i

public MouseHandler(TextArea ta) {


Avatar billede ladyhawke Novice
30. august 2001 - 11:10 #12
lav to mouse handlers en til textfields og en til textareas....
Avatar billede wollabella Nybegynder
30. august 2001 - 14:12 #13
Hmmm f.eks

public class MouseHandler extends MouseAdapter {
    TextArea ta;
    TextField to;
public MouseHandler(TextField to) {
      this.to = to;
    }
  public MouseHandler(TextArea ta) {
      this.ta = ta;
    }
}
Avatar billede ladyhawke Novice
30. august 2001 - 14:19 #14
Ja, det ser rigtigt ud, har du prøvet?

Hvis du ikke kan få det til at virke, kan du prøve at lave én mousehandler som kontrollerer hvilken component der er tale om, vha. if eller switchstatements ....
Avatar billede wollabella Nybegynder
30. august 2001 - 16:24 #15
her er det jeg har lavet

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class test2 extends Applet {
TextArea navn;
TextField alder;
public void init()
    {
    setLayout(null);
    alder = new TextField(20);
    alder.addMouseListener(new MouseHandler(alder));
    add(alder);   
    navn = new TextArea(\"TesT\");
    navn.setSize(100,100);
    navn.setLocation(100, 50);
    navn.addMouseListener(new MouseHandler(navn));
    add(navn);
  }
    public class MouseHandler extends MouseAdapter {
    TextArea ta;
    TextField tf;
    public MouseHandler(TextField tf)
    {
    this.tf = tf;
    }
    public MouseHandler(TextArea ta) {
    this.ta = ta;
    }
    public void mouseClicked(MouseEvent e) {
    ta.setText(\"\");
    }
  }
}


hvorfor ser man ikke det textfield man adder?

og kan du give et eksempel på hvordan man ser dens componet ?
Avatar billede ladyhawke Novice
30. august 2001 - 19:23 #16
\"ser\" textfield? hvad mener du. Din kode som den ser ud nu, sætter ta til en tom streng uanset om du klikker på textarea eller textfield. Du skal lave nogle if sætninger som finder ud af hvad der er klikket på, så du kan reagere på det...

Prøv i øvrigt at kigge her: http://java.sun.com/docs/books/tutorial/uiswing/events/actionlistener.html

Action commands kan nemlig bruge til at skelne mellem forskellige komponenter (Labels, TextAreas, TextFields etc.). Hvis du bruger dem kan du nøjes med en handler hvor mouseClicked indeholder en if-sætning som f.eks.

if (event.getActionCommand()== <action command for textfield> ) {
gør noget
}
else if (event.getActionCommand()== <action command for text area>) {
gør noget andet
}

etc.

Avatar billede wollabella Nybegynder
30. august 2001 - 19:58 #17
ARGHHH intet af det jeg laver virker bare ikkke.!!!!!!

jeg fatter ikke en skid af det der action sjov.



hvordan skal jeg insæt det der if og alt det der du skrev? i det jeg har?
Avatar billede ladyhawke Novice
31. august 2001 - 10:22 #18
i mouseClicked! Som det er nu, sættes ta\'s tekst til \"\" hver gang du klikker på en component som bruge denne mousehandler, det vil sige både dit tekst field og dit tekst area.

Mht action command så kan du teste hvilken component der giver hvad ved at lave følgende:

public void mouseClicked(MouseEvent e) {
    System.out.println(\"Action command: \" +e.getActionCommand());
}

køre programmet, klikke på dine komponenter en ad gangen og læse resultatet i dos vinduet. Herefter kan du lave en if-sætning som den jeg angav i går hvor du erstatter < ... > med det du fik fra kørslen...
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