在Swing JDialog中删除"X"按钮

ric*_*chs 59 java swing

有没有办法从JDialog标题栏中删除关闭按钮("X")?

Hux*_*uxi 57

您可以通过调用dialog.setUndecorated(true)来删除整个对话框标题,但这意味着无法再移动该对话框.

您还可以执行dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)以防止该按钮执行任何操作.

除此之外,我认为没有办法完全删除X.


the*_*e19 12

我相信你可以打电话dialog.setUndecorated(true)删除标题栏.虽然不确定'X'.

但是,删除"X"可能不是一个好主意,因为您希望用户能够轻松关闭对话框.

最好的办法是控制用户点击'X'时发生的事情dialog.setDefaultCloseOperation或使用a WindowListener.


Sup*_*tar 9

从Java 1.7(AKA Dolphin或Java 7)开始,您无法禁用或删除Window上的关闭按钮.您可以删除/禁用最大化按钮,frame.setResizable(false)您可以使用java.awt.Dialog扩展按钮来删除最小化和最大化按钮,例如javax.swing.JDialog.您可以删除标题栏,边框和按钮frame.setUndecorated(true),您可以完全控制标题栏中所有按钮的可见性(同时失去一些跨平台兼容性和操作系统集成)frame.setDefaultLookAndFeelDecorated(true)(假设它是JFrame或JDialog) .这是我在当前JDK中看到的所有控件.

  • 这是"不会修复"[bug parade](http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5085932). (4认同)

Ryu*_*yuu 6

这是我的经验:

  • 尝试使用setUndecorated(true):使整个Dialog不可见。
  • 尝试过setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE):这根本没有改变行为。我的对话框仍然关闭。设置默认关闭操作以将DO_NOTHING_ON_CLOSE关闭操作委托给windowClosing()已注册的方法WindowListener

对我有用的是:

setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
//Remove any existing WindowListeners
for (WindowListener wl : this.getWindowListeners()) {
    this.removeWindowListener(wl);
}
this.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        if ("Optional condition") {
            JOptionPane.showMessageDialog(null, "You cannot close this window");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)


Tom*_*ine 1

猜测一下,将其设置为 PL&F 修饰并按名称删除该组件。