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);
}
fonte
2011-09-05 16:15:27
Puoi spiegare perché vuoi farlo? Potrebbe dare un'idea per un approccio che funzioni. –