Avatar billede tendal Nybegynder
05. november 2003 - 17:01 Der er 10 kommentarer og
1 løsning

Tilgå ydre klasse

Hej Eksperter

Jeg har et lille problem med en anonym klasse. I denne klasse starter jeg et nyt vindue op som gerne skulle have det vindue som det startes fra med som paramenter, men jeg kan jo ikke skrive this, for så er det jo den anonyme klasse jeg sender med og det er ikke meningen. Kan jeg ved hjælp af et eller andet ord sende den ydre klasse med. I får lige noget kode så det bliver lidt nemmere at forstår

100 Point

public class Vindue extends JFrame implements Observer
{

  Model mo = new Model(this);
  List list1 = new List();
  JButton jButton1 = new JButton();
  JTextField jTextField1 = new JTextField();
   
  ActionListener PersonData = new ActionListener() {
        public void actionPerformed(ActionEvent  e)  {
            Opret pd = new Opret("DEN YDRE KLASSE - altså Vindue");
            pd.setSize(410,480);
            pd.setVisible(true);
        }
    };
Avatar billede arne_v Ekspert
05. november 2003 - 17:08 #1
Lav det som:

public class Vindue extends JFrame implements Observer, ActionListener
{
...
  xxx.addActionListener(this);
...
        public void actionPerformed(ActionEvent  e)  {
            Opret pd = new Opret(this);
            pd.setSize(410,480);
            pd.setVisible(true);
        }
...

Altdå drop den anonyme klasse og gør selve framen til action listener !
Avatar billede tendal Nybegynder
05. november 2003 - 17:23 #2
Hvad nu hvis man har mere end en ActionListener?
Avatar billede arne_v Ekspert
05. november 2003 - 17:27 #3
Du nøjes med en men tester på hvor event kommer fra.

Her er et eksempel:

  public void actionPerformed(ActionEvent ev) {
    int rb;
    if(ev.getSource() == jRadioButton1) {
      rb = 1;
    } else if(ev.getSource() == jRadioButton2) {
      rb = 2;
    } else if(ev.getSource() == jRadioButton3) {
      rb = 3;
    } else {
      rb = 0;
    }
  }
Avatar billede arne_v Ekspert
05. november 2003 - 17:28 #4
Hvis du vil gribe det anderledes an kan du i.s.f. anonyme klasser vælge
rigtige klasser og sende this med over i constructor.

Jeg har bare altid brugt det andet.
Avatar billede tendal Nybegynder
05. november 2003 - 17:36 #5
Det giver da mange if statments ved mange ActionListeners, men hvis jeg forstår dig ret skal jeg kun have en public void actionPerformed(ActionEvent ev) og så i den lave mine iffer.
Men hvad skal jeg så ?.addActionListener() til???
Avatar billede arne_v Ekspert
05. november 2003 - 17:39 #6
Det samme som nu !

Nu må du have nogle:
  xxx.addActionListener(PersonData);
Avatar billede tendal Nybegynder
05. november 2003 - 17:41 #7
Ok - jeg skal simpelthen add.ActionListener(this) til alle de knapper og hvad jeg nu ellers har - ikke sandt?
Avatar billede arne_v Ekspert
05. november 2003 - 17:44 #8
Jo.

Dem adder du vel også din nuværende action listener til.
Avatar billede tendal Nybegynder
05. november 2003 - 17:45 #9
Ja men forskellen er jo at jeg nu adder den samme til alle
Avatar billede arne_v Ekspert
05. november 2003 - 17:48 #10
Ja. Men det kan man som sagt teste sig ud af.

Måske bliver du ligefrem glad for at have al klik koden
placeret i samme metode.

:-)
Avatar billede tendal Nybegynder
05. november 2003 - 17:53 #11
Jeps, og man behøver vel i og for sig ikke at putte alle sine ActionListeners ind i denne. Jeg prøver i hvert fald bare at putte dem der skal have this med som parameter der ind i.
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