【发布时间】:2014-12-21 09:27:12
【问题描述】:
是否可以从 JDialog 中删除标题栏,但保留边框?
基础 SSCCE 如下所示:
package test;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.SwingUtilities;
public class SSCCE extends JFrame {
private JDialog dialog;
public SSCCE() {
dialog = new JDialog();
dialog.setSize(100, 100);
dialog.add(new JList<>(new String[] { "One", "Two", "Three" }));
dialog.setUndecorated(true);
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void showDialog() {
dialog.setLocationRelativeTo(this);
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
SSCCE ex = new SSCCE();
ex.setVisible(true);
ex.showDialog();
}
});
}
}
运行它我看到了这个:
但我不想要 JDialog 上的标题栏。标准答案是使用setUndecorated(true)。但后来我也失去了窗口边框,我不希望这样。看起来像这样:
我想要的是这样的样机:
我如何做到这一点?
编辑:
我尝试使用 LaF 边界之一,但得到了一些奇怪的结果。只是为了测试,我使用了“RootPane.errorDialogBorder”,并希望在我的对话框周围得到一个红色的粗边框。但是我得到了这个:
在我看来,这就像“RootPane.frameBorder”边框的无焦点版本。为什么我得到了那个?
【问题讨论】:
-
“是否可以从 JDialog 中删除标题栏,但保留边框?” 简短的回答通常是,不。有些外观提供自己的框架板,有些使用操作系统,因此问题进一步复杂化......
-
@Tobbe 为面板添加边框并为jdialog添加面板
-
@FastSnail 我不知道如何创建那种边框。它需要以某种方式基于当前的 LaF 边框样式。你有什么想法吗?