gpt4 book ai didi

java - 我用于确定适当字体大小的 while 循环太过分了......有时?

转载 作者:行者123 更新时间:2023-12-02 11:08:36 25 4
gpt4 key购买 nike

我正在为学校做一个项目,需要我读取一个文件并用读取的数据制作一个条形图。我创建了一个类,该类制作 JFrame 并绘制矩形,以将框架分为每个数据名称(足球运动员姓名)的部分和条形(球员年龄)的部分。我有一个方法,旨在增加字体大小,直到最长的(打印的)字符串占据分配空间的宽度,并返回要在绘制方法中使用的该大小的字体。

它在创建初始 JFrame 时起作用,但当我调整它的大小时,它有时会将字体大小 1 增大到较大,但并非总是如此。我很茫然。控制台输出(对我来说)显示,我的 while 循环的条件未得到满足,但字体大小仍然增加......任何见解将不胜感激。谢谢!

private Font myFont(int allowedW, int allowedH, int numData) {
// needs to check length of font and size of JFrame and set font (size)
// accordingly
String longest = "";
int fontSize = 1;
Font f = new Font("SansSerif", Font.BOLD, fontSize);
for (BarData b : this.graphData) {
if (getFontMetrics(f).stringWidth(b.getName()) > getFontMetrics(f)
.stringWidth(longest)) {
longest = b.getName();
}
}
while ((getFontMetrics(f).stringWidth(longest) < allowedW)){
//&& ((getFontMetrics(f).getHeight() * numData) < allowedH)) {
f = new Font("SansSerif", Font.BOLD, fontSize);
System.out.println(longest);
System.out.println("length " + getFontMetrics(f).stringWidth(longest));
System.out.println("allowed width " + allowedW);
System.out.println(fontSize);
fontSize++;
}
return f;
}

当我拖动以调整 jframe 大小时,输出看起来像这样:

德马里厄斯·托马斯
长度150
允许宽度158
17
德马留斯·托马斯
长度170
允许宽度158
18

最佳答案

像这样改变你的 while 循环,

while ((getFontMetrics(f).stringWidth(longest) < allowedW)){
//&& ((getFontMetrics(f).getHeight() * numData) < allowedH)) {
System.out.println(longest);
System.out.println("length " + getFontMetrics(f).stringWidth(longest));
System.out.println("allowed width " + allowedW);
System.out.println(fontSize);
fontSize++;
f = new Font("SansSerif", Font.BOLD, fontSize);//your f is not updated after increasing fontSize, if you put it as first statement.
}
return new Font("SansSerif", Font.BOLD, fontSize - 1);

关于java - 我用于确定适当字体大小的 while 循环太过分了......有时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50752567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com