如何确定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
相关产品推荐
相关产品推荐

