【问题标题】:JDialog: Remove titlebar, keep borderJDialog:删除标题栏,保留边框
【发布时间】: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 边框样式。你有什么想法吗?

标签: java swing border jdialog


【解决方案1】:

它需要以某种方式基于当前的 LaF 边框样式。

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

似乎您需要一个边框来突出显示弹出窗口,以便它从文本字段中脱颖而出。我认为最接近的方法是使用 LAF 定义的边界。例如,您可以使用UIManager 中定义的“TitledBorder.border”属性,它是一个简单的边框,但每个 LAF 似乎略有不同。

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

【讨论】:

  • 感谢 UIManager 默认应用程序的链接,非常有用!但实际上尝试使用其中一个边框我得到了一些奇怪的结果,请参阅我对原始问题的编辑。
  • @Tobbe,我不知道为什么边框颜色与 UIManager 默认值显示的不同。绘制边框的代码在 MetalBorders 类中找到,但我无法找到实际颜色的确定位置。
  • 不仅是颜色,还有内线!这一切都很奇怪。
猜你喜欢
  • 2012-02-13
  • 2016-05-08
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多