2012-05-04 18 views
8

Tengo un programa en el que se añade un JPanel a un JFrame:JPanel a 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(){ 

    ... 

    } 

} 

me sale un error que me pide que cambie el tipo de 'Panel' a 'componente'. ¿Reparo este error? Quiere que haga: Component panel = new Component();

+0

Usted necesita para publicar más código ya que lo que usted envió sólo debe trabajar – Robin

+0

JPanel es un componente. ¿El código que acaba de pegar le da ese error? – Charles

+0

Parece que estás malinterpretando el mensaje de error; ¿Cual es el mensaje de error exacto? – rob

Respuesta

14
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(){ 
... 
} 
+1

Por curiosidad, ¿hay alguna razón por la que no haya extendido 'JFrame' directamente en' Test'? Siempre hago esto, ¿tal vez es un mal hábito? Upvoted. –

+2

@ Jean-FrançoisSavard No estoy agregando ninguna funcionalidad o cambiando ninguna de las funciones existentes del marco, así que solo uso una instancia simple. Por lo general, los constructores de GUI fomentan la ampliación de marcos o paneles (sin ninguna buena razón que pueda ver). –

+0

Bueno, eso tiene sentido, gracias por la respuesta rápida. –

0
Test2 test = new Test2(); 
... 
frame.add(test, BorderLayout.CENTER); 

¿Estás seguro de esto? test NO es un componente! Para hacer lo que estás tratando de hacer, debes dejar que Test2 extienda JPanel!

0

Su clase Test2 no es Component, tiene un Component que es una diferencia.

O haces algo así como

frame.add(test.getPanel()); 

después introdujo un captador para el panel en su clase, o asegurarse de que su clase Test2 se convierte en un Component (por ejemplo, ampliando un JPanel)

1

En lugar de tener su clase Test2 conteniendo un JPanel, debería tener la subclase JPanel:

public class Test2 extends JPanel { 

Test2(){ 

... 

} 

Más detalles:

JPanel es una subclase de componentes, por lo que cualquier método que toma un componente como un argumento también puede tener un JPanel como argumento.

Las versiones anteriores no le permitían agregar directamente a un JFrame; tenías que usar JFrame.getContentPane(). add (Component). Si está usando una versión anterior, esto también podría ser un problema. Las versiones más nuevas de Java le permiten llamar directamente a JFrame.add (Component).

2

lo hacen simplemente

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

} 
     ); 
} 

} 
+0

esto debería ayudar. funciona como un encanto para mí – sabbibJAVA