2011-09-05 51 views
5

什么代码将有助于作出JDialog不可移动?我已经看了两个选项:爪哇 - 的JDialog不可移动

  1. setUndecorated(true);这工作,但删除所有的礼品。
  2. addComponentListener并重写componentMoved()方法,这会导致JDialog随后调用induceEpilepticSeizure()在移动。

任何想法?

+2

你能解释一下你为什么要这样做吗?它可能会提供一种可行的方法。 –

回答

5

我的第一直觉就是 - 你不能,除非你使用setUndecorated(真)...你可以手动把一些边角料那里,但是,好了,噢!

所以,如果你想在本地饰物,你想它没有不动产从使用的组件监听可怕的闪烁,我觉得你不能。

您可以手动创建一个像默认边框一样的边框......下面是一个如何实现它的示例,尽管我故意将边框看作您整天看到的最丑陋的东西。你需要找到正确的BorderFactory调用组合来实现你想要做的事情。

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

我不使用setUndecorated(true)的原因是我想保留默认边框。窗口是否是无边界的?哥们,谢啦。 –