是否可以从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”边框的未聚焦版本一样。为什么我得到那个?
答案 0 :(得分:3)
它需要以某种方式基于当前的LaF边界风格。
如您所知,无法使用实际的对话框/边框。
好像你需要一个边框来突出显示弹出窗口,因此它从文本字段中脱颖而出。我认为你最接近的是使用由LAF定义的边界。例如,您可以使用&#34; TitledBorder.border&#34; UIManager
中定义的属性是一个简单的边界,但每个LAF看起来略有不同。
看看UIManager Default。它显示每个LAF的所有边框