2011-09-20 17 views
6

Aggiungo un gruppo di JInternalFrame s a JDesktopPane, in quanto l'utente seleziona l'apertura di varie funzioni tramite i menu. Ma vorrei che i frame interni si aprissero centrati nel riquadro del desktop, invece che in alto a sinistra, dove sembrano predefiniti.Come si apre un oggetto JInternalFrame centrato in un JDesktopPane?

Come è possibile specificare che JInternalFrames sia centrato o spostato al centro dopo l'apertura?

jDesktopPane.add(jInternalFrame); // jInternalFrame is not centered! 
+1

Si dovrebbe ottenere il con e l'altezza dello schermo, e fare qualche calcolo per impostare la X e Y per il JInternalFrame. Non l'ho fatto da anni, quindi non posso darti i metodi completi. Scusa – santiagobasulto

risposta

11

per riferimento, ecco la soluzione che ho usato, sulla base del parere del dogbane:

Dimension desktopSize = desktopPane.getSize(); 
Dimension jInternalFrameSize = jInternalFrame.getSize(); 
jInternalFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2, 
    (desktopSize.height- jInternalFrameSize.height)/2); 
4

Calcolare l'angolo superiore sinistro della nuova posizione (in base alle dimensioni del JDesktopPane e JInternalFrame) e quindi chiamare JInternalFrame.setLocation.

0

Suggerirei il metodo Window.setLocationRelativeTo (Component), che centrerà la finestra rispetto a un componente specificato. Invece di passare in un JDesktopPane, si potrebbe desiderare di ottenere il frame genitore per un componente, in quanto in caso contrario, il vostro JInternalFrame sarà centrato in base a qualsiasi componente si passa

Ecco un esempio di codice:.

private void showDialog(Dialog dialogToCenter, Component button) { 
    Frame frame = JOptionPane.getFrameForComponent(button); 
    dialogToCenter.setLocationRelativeTo(frame); 
    dialogToCenter.setVisible(true); 
} 
+2

Credo che setLocationRelativeTo sia disponibile solo per Windows, non per JInternalFrames (che non ereditano da Window). Forse mi manca qualcosa, ma puoi usare questo metodo con un JInternalFrame invece di un JDialog? – Steven

+0

Spiacente, hai ragione, ho erroneamente pensato che JInternalFrame fosse esteso da Window. – piepera

Problemi correlati