Vererbung von Klassen

Lautsprecher

Erfahrenes Mitglied
Vererbung von Klassen Noch eine Anfänger Frage zur Vererbung:

Ich habe zwei Klassen: Klasse A und Klasse GradientButton

In der A wird mein Frame durch getJContentPane() meine Anzeige aufgebaut
Wie greife ich nun auf meine Button-Klasse von hier aus zu:


unter getJContentPane()
GradientButton jBGE = new GradientButton(); einfügen
müsste doch funktionieren

mit public class GradientButton extends A {}

Reicht dass schon oder muss ich von der GradientButton Klasse dann noch was an A übergeben, damit das Zeugs läuft?

Hier mein kompletter Code:

Ausschnitt aus Klasse 1: Class A
Code:
private JPanel getJContentPane() 
	{
		if (jContentPane == null)
		{
		
		jContentPane = new JPanel();
		jLabel12 = new JLabel();
		jLabel12.setBounds(new java.awt.Rectangle(808, 626, 50, 25));
		jLabel12.setText("Zeit:");
                                jContentPane.add(jLabel, null);
                                GradientButton jBGE = new GradientButton();                           
                                jContentPane.add(jBGE);
                               }
		return jContentPane;
	}

Klasse 2:
Code:
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
 
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class GradientButton extends A{
	
	public static void main(String[]args)
	{
		new GradientButtonExample();
	}
	
	public GradientButtonExamle()
	{
	
	          JButton jbtn = new JButton(){
	        	  protected void paintComponent(Graphics ga)
	        	  {
	        	  Graphics2D g = (Graphics2D)gra;
	        	  super.paintComponent(g);
GradientPaint gradient = new GradientPaint (675,557,Color.GREEN,126,92,Color.GREEN);
                                                  g.setPaint(gradient);
	        		  g.fillRect(675,557,126,92);
	        		  getUI().paint(g,this);
	        	  }
	          };
	          super.add(jbtn);
	
	}
}
 
Also so wie ich das sehe möchtest du ne Klasse programmieren mit der du nen Button anlegen möchtest. Dann würde ich das anders machen.

Lass deine Button-Klasse von JButton erben, dann stehen dir da alle Methoden von JButton zur verfügung. Da kannste dann schreiben wie dein Button aussehen soll.

In deiner A-Klasse legst du dann ein Objekt davon an, wie mit JButton, halt nur mit deiner Klasse. Da sagst du dann wie groß er wird, wo er positioniert wird, usw.

MFG zEriX
 
Vererbung von Klassen Hi Zerix,
danke Dir für Deine Vorgehensweise. Hab es auch gleich mal ausprobiert. Doch stimmen tut es noch nicht ganz. Liegt wahrscheinlich auch daran, dass ich in Thomas GradientButton-Code noch nicht ganz durchgestiegen bin. Kannst du Dir das Ganze vielleicht nochmal anschauen? Wär Super!

Also in meiner Hauptklasse A steht jetzt folgendes:

Code:
private JPanel getJContentPane() 
{
               GradientButton jBGE = new GradientButton();
	jBGE.setBounds(new java.awt.Rectangle(675,557,126,92));
	jBGE.setFocusable(false);
	jBGE.setText("Gehen");
}

Dann habe ich eine Button-Klasse angelegt die von JButton erbt:

Code:
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Event;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JButton;


public class GradientButton extends JButton
{

	public static void main(String[]args)
	{
		JButton neuerButton = new JButton()
		{
			protected void paintComponent(Graphics gra)
			{
			Graphics2D g = (Graphics2D)gra;
			super.paintComponent(g);
		
			GradientPaint gradientPaint = new GradientPaint 
                                                                        (675,557,Color.RED,126,92,Color.RED);
			g.setPaint(gradientPaint);
			g.fillRect(675,557,126,92);
			getUI().paint(g,this);
			}
		};
}

Wie gesagt es funktioniert nicht. Außerdem komme ich ein wenig durcheinander. Ich lege in der Klasse A ein Objekt jBGE an. Ist es dann noch notwendig in der GradientButton-Klasse wieder ein Objekt neuerButton anzulegen.
Außerdem gibt es da noch das Problem mit dem ActionListener und der ActionPerformed-Methode. Wo baue ich diese am besten ein?

Hasta luego
 
Ist nu quick and dirty (keine Exceptions abgefangen usw.) aber meinst Du es vielelicht so?
Code:
package quickanddirty;

import javax.swing.JFrame;

@SuppressWarnings("serial")
public class GradientButtonexample extends JFrame {

	@SuppressWarnings("serial")
	public GradientButtonexample() {
		super("GradientButtonExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		GradientTestButton gtb = new GradientTestButton();
		add(gtb.gradientbutton());
		gtb.setColor(255, 255, 255, 255);
		
		pack();
		setVisible(true);
	}



	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new GradientButtonexample();
	}

}
und die Buttonklasse
Code:
package quickanddirty;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JButton;

public class GradientTestButton extends JButton  {
	JButton btn = null;
	public JButton gradientbutton() {
		btn = new JButton("Push me") {
			protected void paintComponent(Graphics gra) {
				Graphics2D g = (Graphics2D) gra;
				super.paintComponent(g);
				int w = this.getWidth();
				int h = this.getHeight();

				GradientPaint gradientPaint = new GradientPaint(0.F, 0.F,
						Color.YELLOW, w, h, Color.RED);
				g.setPaint(gradientPaint);
				g.fillRect(0, 0, w, h);

				getUI().paint(g, this);
			}
		};
		return btn;
	}
	public void setColor(int r, int g, int b, int a){
		btn.setBackground(new Color(r,g,b,a));
	}
	public GradientTestButton(){
		
	}
}

Gruß
Luxor
 
Zurück