Java - JDialog不可移动

时间:2011-09-05 16:11:28

标签: java swing jdialog

什么代码有助于使JDialog无法移动?我看了两个选项:

  1. setUndecorated(true);有效但删除了所有裁剪。
  2. addComponentListener并覆盖componentMoved()方法,这会导致JDialog随后在移动时调用induceEpilepticSeizure()
  3. 有什么想法吗?

1 个答案:

答案 0 :(得分:5)

我的第一直觉是 - 除非你使用setUndecorated(true),否则你不能......你可以在那里手动放一些装饰,但是,嗯,UGH!

因此,如果您想要原生装饰并且您希望它在不使用组件监听器的可怕闪烁的情况下不可移动,我认为您不能。

你可以手动创建一个边框,看起来像默认边框......这是一个如何做的例子,虽然我有意让边框看起来像你整天看到的最丑陋的东西。你需要找到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);
}