Ciao a tutti.
La mia domanda forse è stupida, forse no; giudicate voi se è corretto o meno quello che ho fatto.
Praticamente ho creato delle sottoclassi di JFrame, JButton, JLabel e JPanel. Il problema è che così facendo le variabili di esemplare non vengono istanziate correttamente: width e height dei componenti valgono 0, e non so cos'altro manca...

Queste sono le classi che ho creato:

Classe Frame
codice:
import javax.swing.JFrame;

public class Frame extends JFrame
{
	private static final int FRAME_WIDTH = 300;
	private static final int FRAME_HEIGHT = 400;
	private static final int FRAME_X_POS = 200;
	private static final int FRAME_Y_POS = 200;	
		
	public Frame()
	{
		setTitle("Un Frame.");
		setBounds(FRAME_X_POS,FRAME_Y_POS,FRAME_WIDTH,FRAME_HEIGHT);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}	
}
Classe Button
codice:
import javax.swing.JButton;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

public class Button extends JButton
{
	private JButton button;
	
	class MouseOverListener implements MouseListener
	{
		public void mousePressed(MouseEvent event){}			
		public void mouseReleased(MouseEvent event)
		{
			System.out.println("Button: sono stato cliccato.");
		}			
		public void mouseClicked(MouseEvent event){}			
		public void mouseEntered(MouseEvent event){}
		public void mouseExited(MouseEvent event){}			
	}
	
	public Button(String text)
	{
		button = new JButton(text);
		MouseListener listener = new MouseOverListener();
		addMouseListener(listener);
	}

}
Classe Label
codice:
import javax.swing.JLabel;

public class Label extends JLabel
{
	private JLabel label;
	
	public Label(String text)
	{
		label = new JLabel(text);
	}
}
Classe Panel
codice:
import javax.swing.JPanel;

public class Panel extends JPanel
{
	private JPanel panel;
	
	public Panel()
	{
		panel = new JPanel();
		setSize(200,200); //senza questo non riesco a cliccare button
	}
}
Classe Main
codice:
public class Main
{
	public static void main(String[] args)
	{
		Frame frame = new Frame();
		Button button = new Button("Button");
		Label label = new Label("This is a label.");
		Panel panel = new Panel();
		panel.add(button);
		panel.add(label);
		frame.add(panel);
	}
}
L'output è questo



La domanda è: perché i componenti non vengono visualizzati? Forse ho sovrascritto qualche metodo delle superclassi senza volerlo e quindi sballa tutto?

Ringrazio in anticipo chiunque abbia la pazienza e la voglia di rispondermi!




EDIT: ho appena scoperto che se invoco i costruttori delle superclassi con super() funziona tutto alla perfezione però vorrei sapere da voi esperti se quest'approccio è corretto o se è meglio evitarlo... grazie!