Avatar billede thinge Nybegynder
16. april 2002 - 22:08 Der er 18 kommentarer og
3 løsninger

Hvad betyder dette

Jeg sidder og studere nogle java eksempler og  falder over dette som står inde midt i en klasse:

MouseListener ml = new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
        int selRow = tree.getRowForLocation(e.getX(), e.getY());
        TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
        if(selRow != -1) {
            if(e.getClickCount() == 1) {
                mySingleClick(selRow, selPath);
            }
            else if(e.getClickCount() == 2) {
                myDoubleClick(selRow, selPath);
            }
        }
    }
};
Det jeg ikke forstår er:
MouseListener ml = new MouseAdapter(){
bla .....
};
er det en klasse eller hvad??
/thinge
Avatar billede monstermand Nybegynder
16. april 2002 - 22:11 #1
ja - det er en klasse der selv er blevet modelleret et andet sted i koden..
Avatar billede disky Nybegynder
16. april 2002 - 22:11 #2
Det du bruger er en såkaldt inner class.
Du opretter et object af typen 'MouseAdapter' samtidigt med at du definerer en metode inde i den klasse'

Du kunne også have lagt det i en anden fil.
Avatar billede monstermand Nybegynder
16. april 2002 - 22:11 #3
og dog..
Avatar billede erikjacobsen Ekspert
16. april 2002 - 22:12 #4
MouseListener er en interface, hvor der står et mindre antal mentoder,
som du skal implementere for at kunne bruge den. Det gider vi normalt
ikke, så nogle flinke mennesker har lavet en implementering af MouseListener,
som de kalder MouseAdaptor, der indeholder tomme realiseringer af
alle disse metoder.

Så kan du nemlig nøjes med at realisere den ene du typisk får brug
for.

Hvis altså det var det du spurgte om .... :=)
Avatar billede monstermand Nybegynder
16. april 2002 - 22:13 #5
så ved man det...
Avatar billede codemon Nybegynder
16. april 2002 - 22:14 #6
MouseListener og MouseAdapter er i familie med hinanden og det du gør kaldes polymorfi.

Et object og dets reference behøver ikke være ens.
fx
Object o = new String("String på Object reference");
eller
MinForælderKlasse reference = new MinBarnKlasse();

bare ikke
Barn på forælder

sig til hvis du skal bruge mere info om polymorfi
Avatar billede codemon Nybegynder
16. april 2002 - 22:16 #7
Ok lidt for hurtigt. new MouseAdapter{ // her kommer klasse implementationen .. }

Kaldes en anonym klasse. implementationen følger umiddelbart new .. og ligger ikke i en navngivet fil

(Det er dog også stadig polymorfi)
Avatar billede thinge Nybegynder
16. april 2002 - 22:21 #8
At der bliver lavet en klasse af typen MouseAdaptor, kan jeg godt forstå, men her er så et nyt eksempel. Hvilken type klasse er det??

final JTree jt=new JTree(rod);
jt.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
jt.addTreeSelectionListener(new TreeSelectionListener() {
           
            public void valueChanged(TreeSelectionEvent e) {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                jt.getLastSelectedPathComponent();
            }
        });

"jt.addTreeSelectionListener(new TreeSelectionListener()" returnere void eller hvad
Avatar billede codemon Nybegynder
16. april 2002 - 22:24 #9
TreeSelectionListener er ligesom MouseAdapter et interface og implementationen til den speciferede metode valueChanged, gives her med en anonym klasse som.
new TreeSelectionListener() {
           
            public void valueChanged(TreeSelectionEvent e) {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                jt.getLastSelectedPathComponent();
            }
        }
Avatar billede erikjacobsen Ekspert
16. april 2002 - 22:25 #10
new KlasseNavn() { ...en eller flere metoder... }

laver både en ny klasse (nemlig en nedarvning fra KlasseNavn, hvor de anførte metoder
typisk overskriver eksisterende) - men klasse har ikke noget navn.

Men "new" laver også et objekt af den nye ikke-navngivne klasse, og det er det den
afleverer. Da klassen ikke har noget navn, kan du ikke lave mere end dette ene
objekt af klassen
Avatar billede thinge Nybegynder
16. april 2002 - 22:28 #11
Hvis jeg nu gerne vil have dette i en fil for sig selv:

jt.addTreeSelectionListener(new TreeSelectionListener() {
           
            public void valueChanged(TreeSelectionEvent e) {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                jt.getLastSelectedPathComponent();
            }
        });
hvordan gøres dette??
Avatar billede erikjacobsen Ekspert
16. april 2002 - 22:30 #12
Du laver en

  public class DitEgetNavn extends TreeSelectionListener {
    ...metoden..
  }

og i den oprindelige fil

  jt.addTreeSelectionListener(new DitegetNavn());
Avatar billede codemon Nybegynder
16. april 2002 - 22:32 #13
Dog nok implements i stedet for extends. (TreeselectionListener er interface, ikke klasse)
Avatar billede erikjacobsen Ekspert
16. april 2002 - 22:35 #14
Nemlig, codemon. Godt du er vågen. Altså:
  public class DitEgetNavn implements TreeSelectionListener {
Avatar billede codemon Nybegynder
16. april 2002 - 22:38 #15
erikjacobsen du forklarer tingene utroligt forståeligt, du burde skrive et IDG-hæfte om java, det ville hjælpe os stakkels datamatikerstuderende til en nemmere start.
Avatar billede erikjacobsen Ekspert
16. april 2002 - 22:41 #16
Tak tak, codemon. Jeg er i præcis den branche - blot ikke på Bornholm (og heller
ikke i - er det ikke - Lyngby?). Men hvorfor skal datamatikerstuderende have en
nemmere start...?    (Undskyld afbrydelsen, thinge)
Avatar billede thinge Nybegynder
16. april 2002 - 22:49 #17
Tusind tak for hjælpen. Nu håber jeg ikke jeg har generet jer for meget.
Vil erik komme med et svar så du kan få nogle point
Avatar billede codemon Nybegynder
16. april 2002 - 22:51 #18
aha ingen kære mor fra lærerne... men det er altså som regel programmering 1. semester der smider flest ud, eller et semester om. Ellers må et sådan da være på sin plads, der findes jo til delphi og c++, mm. (ok C++ hæftet er totalt forældet og Kris Jamsa har ikke skabt begreb om OOP)
Avatar billede thinge Nybegynder
16. april 2002 - 22:52 #19
det er sgu helt fint med mig at I får en lille "hygge snak" og jeg er forresten enig med pokemon :o)
Avatar billede erikjacobsen Ekspert
16. april 2002 - 22:56 #20
pokemon? Jamen, datamatikeruddannelsen er ikke nem. Og det skal den
måske heller ikke være.... på den anden side skal der jo også nogle
igennem.

Men jeg glemte en smiley ved bemærkningen ovenfor...

Der er en "nem" bog om Java af Brinch Hansen - på engelsk. Den er rer at læse.
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

IT-JOB