你得到一个错误的结果,因为对话框标题和它使用的字体是本机资源。
如果您的应用程序仅适用于 Windows,则可以使用以下代码获取宽度:
Font f = (Font)Toolkit.getDefaultToolkit().getDesktopProperty("win.frame.captionFont");
Graphics gr = getGraphics();
FontMetrics metrics = gr.getFontMetrics(f);
int width = metrics.stringWidth(getTitle());
否则尝试从标题栏的字体中获取 FontMetrics:
Container titleBar = (Container) dialog.getLayeredPane().getComponents()[1];
FontMetrics metrics = titleBar.getFontMetrics(titleBar.getFont());
int width = metrics.stringWidth(getTitle());
如果是动态设置对话框的宽度,还需要考虑LaF间距和边框。尝试这个:
// This is the space inserted on the left of the title, 5px in Metal LaF
width += 5;
// This is the space for the close button, LaF dependent.
width += 4;
// Add the borders
width += dialog.getWidth() - dialog.getContentPane().getWidth();
// Finally set the size
dialog.setSize(new Dimension(width, dialog.getPreferredSize().height));
希望这会奏效。如果您想知道这些数字来自哪里,它们位于JDK 源代码中。