Мой цикл while для определения подходящего размера шрифта заходит слишком далеко ... иногда? - PullRequest
0 голосов
/ 08 июня 2018

Я делаю проект для школы, который требует, чтобы я прочитал файл и сделал гистограмму со считанными данными.Я создал класс, который создает JFrame и рисует прямоугольники, чтобы разделить фрейм на раздел для имени каждого из данных (имя футболиста) и один для столбцов (возраст игрока).У меня есть метод, который предназначен для увеличения размера шрифта до тех пор, пока самая длинная (напечатанная) строка не займет ширину, выделенную для пространства, и не вернет шрифт того размера, который будет использоваться в методе рисования.

Itработает, когда создается исходный 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

1 Ответ

0 голосов
/ 08 июня 2018

Измените цикл 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);
...