You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确定JDialog标题字体大小以适配标题栏宽度?

JDialog长标题无法在标题栏完整显示的解决问题

我遇到JDialog标题过长时,标题栏无法完全显示标题的问题,尝试参考Stack Overflow上《How to set dialog's width relative to the width of its title?》的采纳方案,但未解决问题。

运行以下测试代码:

package test;

import java.awt.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class DialogTitleSize extends JDialog
{
  public DialogTitleSize()
  {
    setModal(true);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    setLayout(new BorderLayout());
    setTitle("This is a very long title. Enough for the preferred size to be extended");
    JLabel label;
    label = new JLabel("Look and feel: " + UIManager.getLookAndFeel().getClass().getSimpleName());
    add(label, BorderLayout.NORTH);
    label = new JLabel("Label.font: " + UIManager.getDefaults().getFont("Label.font").getSize());
    add(label, BorderLayout.SOUTH);
  }

  @Override
  public Dimension getPreferredSize()
  {
    Dimension result;
    result = super.getPreferredSize();
    if (getTitle() != null)
    {
      Font font;
      int  titleStringWidth;
      font = UIManager.getDefaults().getFont("Label.font");
      titleStringWidth = SwingUtilities.computeStringWidth(new JLabel().getFontMetrics(font), getTitle());
      titleStringWidth += 135;
      if (titleStringWidth > result.width)
        result.width = titleStringWidth;
    }
    return (result);

  } // getPreferredSize

  public static void main(String[] args)
  {
    try
    {
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
      DialogTitleSize dialog;
      dialog = new DialogTitleSize();
      dialog.pack();
      dialog.setVisible(true);
    }
    catch (Exception exception)
    {
      exception.printStackTrace();
    }
  }

} // class DialogTitleSize

在不同环境下得到不同结果:

  • Windows 10 + Eclipse 2022-03(Java 18):标题完整显示在对话框标题栏中
  • 同一Windows 10 + 命令行(Java 8):标题被截断,无法完整显示
  • Windows Server 2012 R2 + 命令行(Java 8):标题截断情况更严重

我尝试在创建对话框前添加JDialog.setDefaultLookAndFeelDecorated(true);(参考Stack Overflow问题《Font size of JDialog title》的采纳方案),但结果无变化。

我的PC和Windows Server均使用Java 8,而Eclipse使用Java 18。请问如何解决该问题?


内容的提问来源于stack exchange,提问作者Robert Kock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:06:12