J'ai un programme dans lequel un JPanel est ajouté à un JFrame:
public class Test{
Test2 test = new Test2();
JFrame frame = new JFrame();
Test(){
...
frame.setLayout(new BorderLayout());
frame.add(test, BorderLayout.CENTER);
...
}
//main
...
}
public class Test2{
JPanel test2 = new JPanel();
Test2(){
...
}
}
Je reçois une erreur en me demandant de changer le type de 'panneau' en 'composant'. Est-ce que je corrige cette erreur? Il veut que je fasse: Panneau de composants = new Component ();
public class Test{
Test2 test = new Test2();
JFrame frame = new JFrame();
Test(){
...
frame.setLayout(new BorderLayout());
frame.add(test, BorderLayout.CENTER);
...
}
//main
...
}
//public class Test2{
public class Test2 extends JPanel {
//JPanel test2 = new JPanel();
Test2(){
...
}
fais-le simplement
public class Test{
public Test(){
design();
}//end Test()
public void design(){
JFame f = new JFrame();
f.setSize(int w, int h);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true);
JPanel p = new JPanel();
f.getContentPane().add(p);
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
public void run(){
try{
new Test();
}catch(Exception e){
e.printStackTrace();
}
}
);
}
}
Au lieu que votre classe Test2 contienne un JPanel, vous devriez l'avoir sous-classe JPanel:
public class Test2 extends JPanel {
Test2(){
...
}
Plus de détails:
JPanel est une sous-classe de Component. Ainsi, toute méthode prenant un composant en argument peut également prendre un JPanel en argument.
Les anciennes versions ne vous permettaient pas d’ajouter directement à un JFrame; vous deviez utiliser JFrame.getContentPane (). add (Component). Si vous utilisez une version plus ancienne, cela peut également être un problème. Les nouvelles versions de Java vous permettent d’appeler directement JFrame.add (Component).
Test2 test = new Test2();
...
frame.add(test, BorderLayout.CENTER);
Es-tu sûr de ça? test
n'est PAS un composant! Pour faire ce que vous essayez de faire, vous devez laisser Test2
étendre JPanel
!
Votre classe Test2
n'est pas une Component
, elle a une Component
qui est une différence.
Soit vous faites quelque chose comme
frame.add(test.getPanel() );
après avoir introduit un getter pour le panneau de votre classe ou vous être assuré que votre classe Test2
devient une Component
(par exemple en étendant une JPanel
)