2011-09-05 11 views
5

Quale codice faciliterà la creazione di un JDialog inamovibile? Ho esaminato due opzioni:Java - JDialog unmovable

  1. setUndecorated(true); che funziona ma rimuove tutti i rifili.
  2. addComponentListener e sovrascrivendo il metodo componentMoved(), che provoca lo JDialog in seguito alla chiamata induceEpilepticSeizure() in movimento.

Qualche idea?

+2

Puoi spiegare perché vuoi farlo? Potrebbe dare un'idea per un approccio che funzioni. –

risposta

5

Il mio primo istinto è - non si può a meno che non si usi setUndecorated (true) ... È possibile inserire manualmente alcuni ritagli lì, ma, beh, UGH!

Quindi, se si desidera il rivestimento nativo E lo si desidera inamovibile senza l'orribile sfarfallio derivante dall'uso di un listener di componenti, penso che non sia possibile.

È possibile creare manualmente un bordo che AUGURI come il bordo predefinito ... ecco un esempio di come farlo, anche se ho intenzionalmente reso il bordo simile alla cosa più brutta che abbia visto tutto il giorno. Dovrai trovare la giusta combinazione di chiamate BorderFactory per ottenere ciò che vuoi fare.

public static void main(String[] args) throws InterruptedException { 
    JDialog frame = new JDialog((Frame) null, "MC Immovable"); 
    frame.setUndecorated(true); 
    JPanel panel = new JPanel(); 
    panel.setBorder(BorderFactory.createEtchedBorder(Color.GREEN, Color.RED)); 
    panel.add(new JLabel("You can't move this")); 

    frame.setContentPane(panel); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
    frame.setVisible(true); 
} 
+1

Il motivo per cui non utilizzo setUndecorated (true) è che voglio mantenere il bordo predefinito. Una finestra è senza bordi? Grazie ragazzo. –

Problemi correlati