Pregunta

Estoy teniendo algunos problemas para el diseño de una aplicación MDI con Swing.

No tengo problemas y la aplicación de la JDesktopPane JInternalFrames, mi pregunta va a ser un poco más específico. Aquí está mi marco contenedor de base en un vistazo:

package applicationGUI;

import javax.swing.JFrame;

public class DesktopContainer extends JFrame{
/* Fields */

/* Constructors */
    public DesktopContainer(){
        setContentPane(new Desktop());
        setJMenuBar(AppllicationMenuBar.getMenuBar());

    }
/* Public Methods */
    public Desktop getDesktop(){
        return (Desktop)getContentPane();
    }
}

Y mi escritorio:

public class Desktop extends JDesktopPane{}

Tenga en cuenta que me puse un escritorio como un panel de contenido de la DesktopContainer. Lo que quiero es, para ser capaz de añadir JPanels en el escritorio (modo específico, justo debajo de la JMenuBar). Por desgracia, yo no era capaz de hacer esto. Y, por último, aquí están mis preguntas:

1-) ¿Puede objetos JPanel pueden extraer en un JDesktopPane? Hice algo de investigación, supongo que tiene algo que ver con las capacidades JLayeredPane, pero por desgracia no pude ponerlo en práctica.

2-) Si el objeto JPanel no se puede dibujar en un JDesktopPane, ¿cómo puedo llegar a hacer lo que quiero, algún consejo? Sólo pensé, "añadir dos JPanels al JFrame, utilice el que está en la parte superior para sus necesidades, y dibujar JDesktopPane en la segunda JPanel abajo". Es este un buen enfoque?

Gracias por sus respuestas ..

¿Fue útil?

Solución

JPanel A se pueden extraer y pueden recibir eventos en un JDesktopPane

public class DesktopContainer extends JFrame { 
/* Constructors */
    public DesktopContainer(){
        setContentPane(new Desktop());
        setJMenuBar(createJMenuBar());

        APanel a = new APanel();
        a.setBounds(0, 0, 200, 200);
        a.setVisible(true);
        getDesktop().add(a);
    }   
    ....
}

class Desktop extends JDesktopPane {
}

class APanel extends JPanel { 
    public APanel() { 
        setLayout(new BorderLayout());
        add(new JButton("Hello stackoverflow"));
    }
}

Se trabaja muy bien. Usted debe invocar setVisible (verdadero), setBounds () en JPanel como se requiere JInternalFrame.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top