Domanda

Sto avendo qualche difficoltà a progettare un'applicazione MDI con Swing.

Non ho problemi nell'attuazione del JDesktopPane & JInternalFrames, la mia domanda sarà un po 'più specifico. Qui è la mia base del contenitore Struttura in un colpo d'occhio:

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

E il mio Desktop:

public class Desktop extends JDesktopPane{}

Si noti che ho impostato un desktop come un riquadro del contenuto di DesktopContainer. Quello che voglio è, per essere in grado di aggiungere JPanels sul desktop (specificially, appena sotto la JMenuBar). Purtroppo, non ero in grado di farlo. E, infine, qui sono le mie domande:

1-) può oggetti JPanel essere disegnato su una JDesktopPane? Ho fatto qualche ricerca, credo che abbia qualcosa a che fare con le capacità JLayeredPane, ma purtroppo non ho potuto attuarlo.

2) Se oggetto JPanel non può essere disegnato su un JDesktopPane, come posso riuscire a fare quello che voglio, qualche consiglio? Ho pensato, "aggiungere due JPanels al JFrame, utilizzare quello sulla parte superiore per le vostre esigenze, e disegnare JDesktopPane nelle seconde JPanel sotto". E 'questo un buon approccio?

Grazie per le vostre risposte ..

È stato utile?

Soluzione

A JPanel possono essere disegnati e possono ricevere eventi su 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"));
    }
}

Funziona bene. Si dovrebbe richiamare setVisible (vero), setBounds () su JPanel come richiesto JInternalFrame.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top