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!