В 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);
}
→ Ссылка