【发布时间】:2025-12-02 05:10:01
【问题描述】:
我有一个已设置自定义字体“BP Diet”的 JLabel。如果我将它添加到 JFrame,文本看起来很好,但是一旦我将 JFrame 的布局更改为 FlowLayout,文本的顶部就会出现截断。当您将 JLabel 添加到 JPanel 并将其添加到 JFrame 时,也会出现同样的问题。我的字体在http://www.hichris.com/more/files/BPdiet.otf
下面是代码:
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.URL;
public class FontSizeTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel(
"AaBbCcDdEeFfGgHhIiJjKk");
label.setFont(createFont());
frame.add(label);
frame.pack();
frame.setMinimumSize(frame.getMinimumSize());
frame.setVisible(true);
}
static Font createFont() {
Font customFont = null;
try {
URL url = new URL("http://www.hichris.com/more/files/BPdiet.otf");
InputStream is = url.openStream();
customFont = Font.createFont(Font.TRUETYPE_FONT, is);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(customFont);
} catch (Exception e) {
e.printStackTrace();
}
return customFont.deriveFont(25f);
}
}
应该出现的样子
在pack() 之后出现
大图指出 i & j 上方的点
感谢任何帮助!
【问题讨论】:
-
我正在运行你的代码,没有任何东西被切断
-
当你取消注释 setLayout 方法时,它会被切断:)
-
好的,所以它不是切割,它只是从中间向上移动它。可以吗?我的意思是我的逻辑?
-
不,这个东西实际上是被截断的,如果你放大你可以看到“i”的顶部被截断,但它只是在屏幕的顶部。如果您制作多个标签,您会看到它们都在顶部被切断。这就是奇怪的地方。我在想字体比普通字体大,这就是它被切断的原因。我还可以设置标签的最小尺寸,它仍然被切断。
-
有人知道为什么会这样吗?
标签: java swing fonts jlabel flowlayout