Четверг, 28 Марта 2024, 12:12

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Java » Неадекватный зум JFrame и подсчёт размера строки(Решено)
Неадекватный зум JFrame и подсчёт размера строки(Решено)
minecrafter2Дата: Четверг, 31 Октября 2019, 06:48 | Сообщение # 1
участник
Сейчас нет на сайте
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);


Майнкрафт - лучшая игра в мире

Сообщение отредактировал minecrafter2 - Суббота, 02 Ноября 2019, 03:28
Форум игроделов » Программирование » Java » Неадекватный зум JFrame и подсчёт размера строки(Решено)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг