web-dev-qa-db-fra.com

Ajout de JPanel à JFrame

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 ();

8
Anonymous181
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(){
...
}
15
Andrew Thompson

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();
         }

 }
         );
}

}
3
sabbibJAVA

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).

1
rob
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!

0
StepTNT

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)

0
Robin