是否可以从 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)
。但随后我也失去了窗口边框,我不希望这样。看起来像这样:
我想要的是这样的模型:
我该如何实现这一目标?
EDIT:
我尝试使用 LaF 边界之一,但得到了一些奇怪的结果。只是为了测试,我选择了“RootPane.errorDialogBorder”,并期望在我的对话框周围得到一个肥红色边框。但我却得到了这个:
在我看来,这就像“RootPane.frameBorder”边框的未聚焦版本。为什么我却得到了那个?
它需要以某种方式基于当前的 LaF 边框样式。
正如您已经知道的,不可能使用实际的对话框/框架边框。
似乎您需要一个边框来突出显示弹出窗口,以便它从文本字段中脱颖而出。我认为最接近的方法是使用 LAF 定义的边框。例如,您也许可以使用在中定义的“TitledBorder.border”属性UIManager
这是一个简单的边框,但每个 LAF 的边框似乎略有不同。
看一眼UIManager默认值 http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/。它显示每个 LAF 的所有边框
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)