JDialog:删除标题栏,保留边框

时间:2014-12-21 09:27:13

标签: java swing border jdialog

是否可以从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 with full titlebar and borders

但我不想要JDialog上的标题栏。标准答案是使用setUndecorated(true)。但后来我也失去了窗口边框,我不想那样。看起来像这样:

JDialog with no titlebar and no borders

我想要的是这样的样机:

JDialog with just the borders

我如何实现这一目标?

修改

我尝试过使用其中一个LaF边框,但我得到了一些奇怪的结果。仅仅为了测试,我使用了“RootPane.errorDialogBorder”并且期望在我的对话框周围出现一个红色的边框。但相反,我得到了这个:

JDialog with LAF border

在我看来,就像“RootPane.frameBorder”边框的未聚焦版本一样。为什么我得到那个?

1 个答案:

答案 0 :(得分:3)

  

它需要以某种方式基于当前的LaF边界风格。

如您所知,无法使用实际的对话框/边框。

好像你需要一个边框来突出显示弹出窗口,因此它从文本字段中脱颖而出。我认为你最接近的是使用由LAF定义的边界。例如,您可以使用&#34; TitledBorder.border&#34; UIManager中定义的属性是一个简单的边界,但每个LAF看起来略有不同。

看看UIManager Default。它显示每个LAF的所有边框