В java swing отображаются не корректно некоторые относительно редкие языки
Пишу многоязыковое приложение. Создал демо:
public class SwingLang {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,3000);
JPanel panel = new JPanel();
String[] x = new String[11];
//по русски текст "Проверка коонфигурации и аккаунта"
x[0] = "तैयारी और खाता जांच"; //телугу
x[1] = "తయారీ మరియు ఖాతా తనిఖీ"; //тамильский
x[2] = "தயாரிப்பு மற்றும் கணக்கு சரிபார்ப்பு"; //тайский
x[3] = "การเตรียมและตรวจสอบบัญชี"; //сингальский
x[4] = "සූදානම් වීම සහ ගිණුම පරීක්ෂාව"; //лаосский
x[5] = "तयारी र खाता जाँच"; //непальский
x[6] = "തയ്യാറാക്കലും അക്കൗണ്ട് പരിശോധനയും";//малаялам
x[7] = "ກຳລັງກະກຽມ ແລະ ກວດສອບບັນຊີ"; //
x[8] = "កំពុងត្រួតពិនិត្យ"; //кхмерский
x[9] = "તૈયારી અને એકાઉન્ટ તપાસ"; //гуджарати
x[10] = "ব্যবস্থা এবং একাউন্ট দেখা"; //бенгальский
for (int i = 0; i < x.length; i++) {
JLabel label = new JLabel(x[i]);
System.out.println(x[i]);
panel.add(label);
}
frame.add(panel);
frame.setVisible(true);
}
}
Эти языки в swing приложении отображаются квадратиками. Цель: сделать хотя бы больше половины отображаемыми корректно.
Эти все языки отображаются корректно на Linux Ubuntu. На Windows вывод в консоль так же корректный.
Пробовал подставлять шрифты через класс Font, но и это не помогло. Хотя сама идея со шрифтами не очень нравится, учитывая, что Linux читает и без них.
Больше всего интересует, что можно сделать мне, как разработчику, с кодом или параметрами его запуска, что бы не писать инструкцию что делать пользователю с его ОС
Ответы (1 шт):
Автор решения: Арсений Коротков
→ Ссылка
//берем все доступные шрифты
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
for (int i = 0; i < x.length; i++) {
JLabel label = new JLabel(x[i]);
for (Font font : ge.getAllFonts()) {
//если шрифт спосоен отобразить данный текст
if (font.canDisplayUpTo(x[i]) == -1) {
//установить шрифт для label
label.setFont(font.deriveFont(15f));
break;
}
}
panel.add(label);
}