【问题标题】:Java -- JDialog unmovableJava -- JDialog 不可移动
【发布时间】:2011-09-05 16:11:27
【问题描述】:

什么代码有助于使JDialog 不可移动?我看过两个选项:

  1. setUndecorated(true); 有效,但删除了所有的装饰。
  2. addComponentListener 并覆盖 componentMoved() 方法,这会导致 JDialog 在移动时随后调用 induceEpilepticSeizure()

有什么想法吗?

【问题讨论】:

  • 你能解释一下你为什么要这样做吗?它可能会给出一个可行的方法的想法。

标签: java swing jdialog


【解决方案1】:

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

因此,如果您想要原生装饰,并且希望它不会因使用组件侦听器而产生可怕的闪烁,那么我认为您不能。

您可以手动创建一个看起来像默认边框的边框...这里有一个如何做的示例,尽管我故意让边框看起来像您整天看到的最丑陋的东西。您需要找到正确的 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);
}

【讨论】:

  • 我不使用 setUndecorated(true) 的原因是我想保留默认边框。 Window 是无边框的吗?谢谢大佬。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多