Редактировать: О, дорогой, я неверно указал ваш код, когда тестировал его! Я случайно вычитал два значения, не добавляя их. getAscent()
возвращает отрицательное число, представляющее, сколько пикселей над базовой линией поднимается текст, поэтому правильная формула для позиции равна
double cy = (getHeight() / 2) - (text.getAscent() / 2);
Логика та же, но тот факт, что getAscent()
отрицателен, означает, что вы должны перевернуть знак. Извините за это!
В CS106A мы обычно не запускаем программы Java как апплеты именно потому, что средство просмотра апплетов по умолчанию получает размеры окна неправильно (то есть, вызов getWidth()
или getHeight()
приведет к неверным результатам). Если вы загрузите Stanford Eclipse с веб-сайта CS106A, вы получите плагин Eclipse, который может запускать программы Java, которые вы пишете, как автономные приложения. Когда это происходит, размер и форма окна на самом деле правильные, поэтому getWidth()
и getHeight()
сообщат правильные значения.
В качестве альтернативы рассмотрите возможность добавления следующего кода в свои программы:
public static void main(String[] args) {
new /* name of your class */.start(args);
}
Затем вы можете запустить программу непосредственно как приложение Java, а не как апплет, и эту проблему следует решить.
Надеюсь, это поможет!