Funktion wird nicht durchlaufen.

Status
Nicht offen für weitere Antworten.

Man-e-Faces

Aktives Mitglied
Hallo!
Bin totaler Anfänger mit (peinlichem) Problem:
Ich möchte eine Klasse instanzieren (TextButton) und eine Methode dieser instanzierten Klasse überschreiben. Leider passiert nichts (test() wird anscheinend noch nicht mal durchlaufen, da die Konsole nichts ausspuckt..)
Code:
public void overwrite() {
  textButton1 = new TextButton(){ 
    public void test(){ 
      System.out.println("wird durchlaufen");  
      //Hier irgendwas machen!!
    }
  };
}
Wie geht es richtig?
 
Angenommen in der TextButton-Klasse, die ich instanziere, gibt es eine Funktion, die test heißt. Sie macht erstmal nichts. Jetzt möchte ich aber die test-Funktion der TextButton-Klasse in meiner neuen Klasse überschreiben.Wie kann ich das machen?
Ich dachte, so geht es, allerdings wird public void test() so nicht durchlaufen..Wie kann ich sie aufrufen, um sie zu überschreiben??
 
Genau das ist meine Frage: Wie ruf ich sie innerhalb dieser Klammer auf? Nur overwrite() aufrufen reicht wohl nicht:

overwrite();

Wie kann ich die test()-Funktion innerhalb der overwrite-Funktion aufrufen?
 
Ja, aber wohin schreib ich die Zeile???
Code:
public void overwrite() { 
//hier? textButton1.test();
  textButton1 = new TextButton(){ 
    public void test(){ 
      System.out.println("wird durchlaufen");  
      //Hier irgendwas machen!! 
    } 
  }; 
}
 
ich glaub du bist dir selbst nicht im klaren was du überhaupt machen willst. wenn deine test() methode eh nie aufgerufen wird, brauchst du sie auch nicht zu überschreiben. wenn du das testen willst musst du die methode halt irgendwo aufrufen. wann und wo ist stinkegal
 
Hi Roar!
Das hier istn abstraktes Beispiel..Es geht immernoch um das Überschreiben meiner keyPressed-Methode..Und die wird (wenn alles stimmt) bei Knopfdruck doch automatisch aufgerufen, ne?
Bei mir halt aber nicht...
 
Nein, die test-Methode muss ich natürlich aufrufen.
Das Problem war eigentlich ein anderes:

Ich hab ne Klasse angelegt, die KeyListener implementiert und nen Button darstellt. Die Klasse soll wiederverwendet werden, als Bean.Deshalb lasse ich die keyPressed-Methode leer und möchte sie später überschreiben.Allerdings klappt es nicht, die überschriebene Methode hat keine Wirkung in der Klasse, die die Bean benutzt. Das ist die Bean:
Code:
public class ButtonBean extends HContainer implements KeyListener, Serializable{ 


public HTextButton textButton = new HTextButton(); 
public DVBColor backgroundColor, foregroundColor, focusColor; 
private String text; 
private int buttonWidthX; 
private int buttonHeightY; 

public ButtonBean() { 
getResources(); 
} 

public void getResources(){ 

textButton = new HTextButton("Label me!",0,0,100,50); 
setBounds(textButton.getBounds()); 
textButton.setBackgroundMode(textButton.BACKGROUND_FILL); 
textButton.addKeyListener(this); 
this.add(textButton); 
} 

public String getText() { 
    return this.text; 
} 

public void setText(String text) { 
this.text = text; 
textButton.setTextContent(this.text,textButton.ALL_STATES);  
} 

public int getButtonHeightY() { 
return this.buttonHeightY; 
} 

public void setButtonHeightY(int buttonHeightY) throws java.beans.PropertyVetoException { 
this.buttonHeightY = buttonHeightY; 
textButton.setBounds(0,0,buttonWidthX,buttonHeightY); 
} 

public int getButtonWidthX() { 
    return this.buttonWidthX; 
} 

public void setButtonWidthX(int buttonWidthX) throws java.beans.PropertyVetoException { 
this.buttonWidthX = buttonWidthX; 
textButton.setBounds(0,0,buttonWidthX,buttonHeightY); 
} 

public void keyPressed(java.awt.event.KeyEvent e){ 

//in der Bean leer, da offen bleiben soll, was passieren soll!!! 

} 
public void keyReleased(java.awt.event.KeyEvent e){ 
} 
public void keyTyped(java.awt.event.KeyEvent e){ 
} 
}
und so möchte ich keyPressed überschreiben, in der Klasse, die die Bean benutzt:

Code:
public class useBean extends Scene { 

private ButtonBean bean; 
        

public useBean() { 
        initComponents(); 
} 
    
private void initComponents() { 

bean = new ButtonBean(){ 
public void keyPressed(KeyEvent e){ 
System.out.println("gedrückt");  
//Hier irgendwas passieren lassen!!! 
} 
} 
}; 
} 
}

Aber die überschriebene keyPressed wird bei knopfdruck nicht durchlaufen!!!Die Konsole spuckt nichts aus!!!
 
Und wo ist das Problem?
Code:
/**
 * @author Wildcard
 * created at 05.05.2005
 */
public class Buttons
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(500,500);
		frame.add(new MyButton() {
		
			public void actionPerformed(ActionEvent arg0)
			{
				// TODO Auto-generated method stub
				System.out.println("blupp");
			}
		
		});
		frame.setVisible(true);
	}

}

abstract class MyButton extends JButton implements ActionListener
{

	public MyButton()
	{
		super("Ich bin ein Button");
		addActionListener(this);
	}
	/* (non-Javadoc)
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	abstract public void actionPerformed(ActionEvent e);
}
 
zum einen würde mich interessieren warum deine Klasse nicht abstrakt sein darf(das sollte sie nämlich) und zum anderen was du eigentlich vorhast...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben