1. При запуске JFrame из IDE (Eclipse) - всё нормально
Если скомпилировать программу в запускаемый .jar и запустить через иконку - то окно почему то место заявленных 1600х720 раздувает где то в раза полтора. Если запускать через cmd java -jar game.jar - окно нормальных размеров как указано в программе. Попробовал на другом компьютере - не зависимо от способа запуска фрейм зумится. Я попробовал убрать масштабирование Windows до 100% процентов - стало всё нормально. Как заставить её запускаться игнорируя масштаб Windows? И почему на одной машине способ запуская влияет на размер окна, а на другой - нет?
2. Но это ещё не всё. Самое весёлое вот: мне нужно отображать текст из .txt файла по середине фрейма зависимо от размера строки и размера фрейма, и тут опять же - если программа запустилась из IDE или через cmd то всё нормально - если нет то текст начинает съезжать из за того что размер первой строки почему то перестаёт правильно считаться.
Это функция по которой я текст рисую
Код
public void drawText(Graphics g, String textFile) {
int y = 110;
String text = " ", firstLine = " ";
FileReader fr;
try {
fr = new FileReader(textFile);
BufferedReader reader = new BufferedReader(fr);
firstLine = reader.readLine();
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
text = new String(Files.readAllBytes(Paths.get(textFile)), "MS932");
} catch (IOException e) {
e.printStackTrace();
}
//g.setColor(Color.WHITE);
//g.drawString(g.getFontMetrics().stringWidth(text) + " - " + g.getFontMetrics().stringWidth(firstLine), 32, 160);
y += textScroll;
g.setColor(Color.LIGHT_GRAY);
for (String line : text.split("\n"))
g.drawString(line, getWidth() / 2 - g.getFontMetrics(gameFont).stringWidth(firstLine) / 2, y += g.getFontMetrics().getHeight());
}
Это вообще как так то
Вот именно здесь .stringWidth(firstLine) почему то начинает не правильно читаться
Код
getWidth() / 2 - g.getFontMetrics(gameFont).stringWidth(firstLine) / 2
Добавлено (31 Октября 2019, 06:56)
---------------------------------------------
Скриншотил с рабочем столом для большей наглядности(Все картинки 1280х720)
1. Как правильно
2. Как не надо
Изменение масштабирования до 100% не решает проблему с съезжанием текста.
Добавлено (01 Ноября 2019, 20:27)
---------------------------------------------
Вообще мне главное чтобы текст не съезжал, а на размер окна пофигу вообщем то.
Добавлено (01 Ноября 2019, 23:34)
---------------------------------------------
Хахах,это оказывается происходит только с русским текстом. Изменение кодировки не лечит.
Вообще можете поздравить меня, я нашёл баг - g.getFontMetrics().stringWidth(Line) работает не верно если строка была разгружена из файла с русским текстом.
Но вопрос открыт - как обойти этот баг?
Добавлено (02 Ноября 2019, 00:03)
---------------------------------------------
Хотя мне кажется g тут не причем, а чудит filereader:
Код
try {
tfr = new FileReader(textFile);
tBufferedReader reader = new BufferedReader(fr);
tfirstLine = reader.readLine();
treader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
Ну и как с этим быть?
Добавлено (02 Ноября 2019, 00:05)
---------------------------------------------
Но почему же тогда если запускать из Ecplise то всё норм, а если нет - то всё не норм???
Помогите, сейчас убьюсь об клаву
Добавлено (02 Ноября 2019, 03:28)
---------------------------------------------
Капец stack overflow машина, первый раз там вопрос задал, как по мне серьёзно нерешаемый - решили.
ответ:
BufferedReader reader = Files.newBufferedReader(Paths.get(fileName), StandardCharsets.UTF_8);