Avatar billede apa Nybegynder
04. juni 2003 - 20:38 Der er 17 kommentarer og
1 løsning

Tilføj button i subklasse.

Jeg har en superklasse med en applet hvori jeg har defineret en button som skifter teksten i et tekstfelt når den aktiveres.

Herefter har jeg lavet en subklasse af superklassen (extends SupKlasse), hvori jeg gerne vil definere en ny knap som f.eks. kan ændre på baggrundsfarverne i appletten?
Avatar billede arne_v Ekspert
04. juni 2003 - 20:43 #1
Og hvad er problemet ?
Avatar billede arne_v Ekspert
04. juni 2003 - 20:52 #2
Principielt kan det godt lade sig gøre.

Jeg er dog ikke sikker på, at det er noget godt design.
Avatar billede apa Nybegynder
04. juni 2003 - 20:58 #3
Hvordan tilføjer jeg en ny button i subklassen så jeg kan ændre baggrundsfarverne i appletten?

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

public class SupKlasse extends Applet implements ActionListener{
   
    private Button button;
    private TextField field;
   
    public void init() {
       
        button = new Button("      Klik på mig      ");
        button.addActionListener(this);
        add(button);
       
        field = new TextField(20);
        add(field);
   
        setBackground(Color.gray);
       
        field.setText("");
       
   
    }
   
   
    public void actionPerformed(ActionEvent e){
           
        String str = field.getText();           
        if (str.equals("Hej med dig"))       
        field.setText("Farvel igen");
        else                                       
            field.setText("Hej med dig");   
    }
}



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


public class SubKlasse extends SupKlasse implements ActionListener{
           
??

}
Avatar billede arne_v Ekspert
04. juni 2003 - 21:01 #4
1)

Du behøver ikke implementere ActionListener når du extender end klasse der gør.

Det arver du.
Avatar billede arne_v Ekspert
04. juni 2003 - 21:02 #5
public class SubKlasse extends SupKlasse implements ActionListener{
  public void init() {
        super.init();
        button = new Button("      Noget andet      ");
        button.addActionListener(this);
        add(button);
    }         
}
Avatar billede arne_v Ekspert
04. juni 2003 - 21:03 #6
Vil overide init metode men fordi du kalder super.init bliver den stadigvæk
udført.
Avatar billede arne_v Ekspert
04. juni 2003 - 21:03 #7
actionPerformed skal nok også overrides og kalde super.actionPerformed !
Avatar billede apa Nybegynder
04. juni 2003 - 21:37 #8
Nedarvningen virker nu! Problemet er nu blot: Jeg skriver

public void actionPerformed(ActionEvent e){
        super.actionPerformed(e);
        setBackground(Color.red);
    }
}

Dette resulterer i at begge knapper gør baggrunden rød. Har du et forslag til hvordan det skal gøres hvis nu jeg kun ønsker at den nye knap skal farve baggrunden?
Avatar billede arne_v Ekspert
04. juni 2003 - 21:39 #9
Ja.

Du skal teste på hvilken knap der er trykket på og kun sætte
farven hvis det er den rigtige knap !
Avatar billede arne_v Ekspert
04. juni 2003 - 21:40 #10
if(e.getSource() == button) {
}
Avatar billede apa Nybegynder
04. juni 2003 - 21:55 #11
Takker - det ser fornuftigt ud nu. Lige et sidste spørgsmål: Jeg undrer mig lidt over sammenhængen mellem den knap jeg lavede i superklassen og den knap "jeg" nu har lavet i subklassen. Min nye knap arver alle egenskaber den anden har. Såfremt jeg ville definere en helt ny knap, som ikke også ændrer teksten i feltet når den aktiveres, skulle jeg så tilbage i superklassen og tilføje en knap mere, som jeg tager i brug i subklassen eller hvordan?
Avatar billede arne_v Ekspert
04. juni 2003 - 22:01 #12
Det afhænger af hvordan du erklæret klasserne og de buttons.

Du kan sagtens adskille dem.

public class SubKlasse extends SupKlasse implements ActionListener{
  private Button button;
  public void init() {
        super.init();
        button = new Button("      Noget andet      ");
        button.addActionListener(this);
        add(button);
    }       
}

giver en separat knap.
Avatar billede arne_v Ekspert
04. juni 2003 - 22:01 #13
Jeg kan ikke helt gennemskue hvordan du har fået dem blandet sammen.

Kan du poste noget kode ?
Avatar billede apa Nybegynder
04. juni 2003 - 22:12 #14
jo,

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

public class SupKlasse extends Applet implements ActionListener{
   
    protected Button button;
    private TextField field;
   
    public void init() {
       
        button = new Button("      Klik på mig      ");
        button.addActionListener(this);
        add(button);
       
        field = new TextField(20);
        add(field);
   
        setBackground(Color.gray);
       
        field.setText("");
       
   
    }
   
   
    public void actionPerformed(ActionEvent e){
           
        String str = field.getText();           
        if (str.equals("Hej med dig"))       
        field.setText("Farvel igen");
        else                                       
            field.setText("Hej med dig");   
    }
}


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


public class SubKlasse extends SupKlasse implements ActionListener{
 
  private Button button1;
  public void init() {
        super.init();
        button1 = new Button("      Noget andet      ");
        button1.addActionListener(this);
        add(button1);
    }         



public void actionPerformed(ActionEvent e){
       
       
        super.actionPerformed(e);
       
        if(e.getSource() == button1) {
       
        setBackground(Color.red);
       
       
        }
       

    }
}


Både knap et og to ændrer på nuværende tidspunkt på teksten i tekstfeltet.
Avatar billede arne_v Ekspert
04. juni 2003 - 22:16 #15
Du mangler at ligge et test ind i super klassens actionPerformed !

Den bliver jo kaldt for begge buttons og derfor skal du også
teste der om det er den rigtieg button.
Avatar billede apa Nybegynder
04. juni 2003 - 22:24 #16
Jeg er rimelig ny i det her: kan du uddybe eller give et eksempel?
Avatar billede arne_v Ekspert
04. juni 2003 - 22:26 #17
public void actionPerformed(ActionEvent e){
      if(e.getSource() == button) {     
        String str = field.getText();         
        if (str.equals("Hej med dig"))     
        field.setText("Farvel igen");
        else                                     
            field.setText("Hej med dig"); 
      }
  }
Avatar billede apa Nybegynder
04. juni 2003 - 22:43 #18
Tak for hjælpen!
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