【发布时间】:2014-11-19 06:36:57
【问题描述】:
我有一个程序,它在一个 JFrame 中输出计算结果,该 JFrame 包含一个 JPanel(用于可扩展性),其中包含一个 JLabel,它显示所述输出(这是一个字符串)。
我发现 JLabel 的默认字体相当小且难以阅读,因此增加了字体大小并将其替换为 Windows 特定的字体,但我并没有考虑太多,因为我检查了一个不支持的字体存在,并注意到即使字体不存在,程序也能正常工作。 (在 Windows 7 和 8 上)
但是,在 Ubuntu 上运行时,结果是一个最小尺寸的 JFrame。
所以现在我想知道这是否是 JVM 上某些不兼容的示例,或者是运行它的 Ubuntu 副本的问题。
如果这是 JVM 问题,下面的代码应该会在 Ubuntu(或者一般的 Linux)上复制问题。
import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Main {
public Main(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel lbl = new JLabel("SOME TEXT");
lbl.setFont(new Font("font that doesnt exist", Font.PLAIN, 20));
JPanel pnl = new JPanel();
pnl.add(lbl);
frame.add(pnl, BorderLayout.CENTER);
frame.setVisible(true);
frame.pack();
frame.setLocationRelativeTo(null);
}
public static void main (String[] args)
{
Main main = new Main();
}
}
PS Ubuntu 计算机不是我的,所以我无法完全按照我的意愿进行测试
【问题讨论】:
-
确保从 EDT 上下文中启动 UI,有关详细信息,请参阅 Initial Threads
-
另外,我有点想知道您对
lbl.setFont(new Font("font that doesnt exist", Font.PLAIN, 20))和frame.pack();的期望... -
@MadProgrammer 我没有为正确的实现而烦恼,因为该程序只显示一个结果。它不需要任何输入,也不需要更新其输出,也不需要很长时间来计算输出。
-
@MadProgrammer 我不明白你在第二条评论中的意思。
-
我不确定如果字体不存在 Java/Swing 会做什么,但是如果它不能确定字体的字体度量,它就无法计算首选大小组件的大小,因此,窗口的首选大小
标签: java linux windows swing compatibility