C'è una differenza tra loro e ci sono delle condizioni in cui uno dovrebbe essere usato al posto dell'altro?quando dovrei usare JFrame.add (componente) e JFrame.getContentPane(). Add (componente) in java
risposta
Da quello che ho capito da Javadocs, JFrame.add chiama quest'ultimo. È un metodo comodo per aggirare l'incompatibilità tra il frame di AWT e Swings JFrame.
La classe JFrame è leggermente incompatibile con telaio. Come tutti gli altri contenitori di primo livello JFC/Swing , un JFrame contiene un JRootPane come figlio solo . Il riquadro del contenuto fornito dal riquadro radice dovrebbe, come regola , contenere tutti i componenti non del menu visualizzati da JFrame. Questo è diverso dal caso Frame AWT. Come addiance conven e le sue varianti, remove e setLayout sono state sovrascritte per inoltrare a il contentPane secondo necessità. Ciò significa che è possibile scrivere:
`frame.add(child);`
E il bambino sarà aggiunto alla contentPane. Il riquadro del contenuto sarà sempre non nullo. Tentando di impostare su null, JFrame genererà un'eccezione. Il riquadro del contenuto predefinito di avrà un gestore BorderLayout impostato su di esso. Fare riferimento a a RootPaneContainer per dettagli su come aggiungere, rimuovere e impostare il LayoutManager di un JFrame.
add()
sarà avanti il lavoro per addImpl()
per i quali il JavaDoc del JFrame
stati i seguenti:
Per impostazione predefinita, i bambini vengono aggiunti alla contentPane al posto della cornice.
Pertanto, entrambi i metodi hanno lo stesso comportamento di base, oltre al fatto che l'utilizzo di getContentPane().add(...)
è più esplicito.
Si noti che è possibile modificare il comportamento predefinito per aggiungere (utilizzando setRootPaneCheckingEnabled(false)
), ma non sono sicuro che si vorrebbe farlo.
Entrambe le chiamate sono uguali. In Java 5, hanno modificato jframe.add
per inoltrare le chiamate al riquadro del contenuto.
Dal Java 5 release notes:.
Infine, dopo sette anni, abbiamo fatto jFrame.add equivalente a jFrame.getContentPane() add().
Vedere anche javadocs.
se la domanda è solo su JFrame#add(JComponent)
v.s. JFrame.getContentPane()#add(JComponent)
quindi non c'è differenza, ma se vuoi cambiare f.e. BackGround dipende quindi se si chiama metodi da JFrame#setBackground(Color)
o nidificati o eredita i metodi da awt.Frame JFrame.getContentPane()#setBackground(Color)
...
semplice e chiaro. questa dovrebbe essere la risposta giusta. – GusDeCooL