Java, Swing: как я устанавливаю максимальную ширину JTextField?

Комментарий @MedProgrammer позволил мне понять, что я забыл. Исправление java home относится только к Windows

    static {
        if (System.getProperty("os.name").toLowerCase().contains("windows")) { //Added this check
            String h = System.getProperty("java.home");
            if (!h.endsWith("jre")) {
                h = h.replace("jre", "jdk") + File.separator + "jre";
                System.setProperty("java.home", h);
            }
        }
        JAVAC = ToolProvider.getSystemJavaCompiler();
    }
9
задан Luffy 4 May 2015 в 08:19
поделиться

3 ответа

Это может зависеть от менеджера по расположению, в котором находится Ваше текстовое поле. Некоторые менеджеры по расположению расширяются, и некоторые не делают. Некоторые расширяются только в некоторых случаях, другие всегда.

Я предполагаю, что Вы делаете

filedNameTextField = new JTextField(80); // 80 == columns

Если так, для большинства разумных разметок поле не должно изменять размер (по крайней мере, это не должно расти). Часто менеджеры по расположению ведут себя плохо при помещении в JScrollPanes.

По моему опыту, пытаясь управлять размерами через setMaximumSize и setPreferredWidth и так далее сомнительны в лучшем случае Swing решил самостоятельно с менеджером по расположению и существует мало, можно делать с этим.

Все, что быть сказанным, я имею не, имело проблему, которую Вы испытываете, который приводит меня полагать, что некоторое разумное использование менеджера по расположению решит проблему.

13
ответ дан 4 December 2019 в 11:09
поделиться

Я решил это путем установки максимальной ширины на контейнере текстового поля, с помощью setMaximumSize.

Согласно ответу davetron, это - хрупкое решение, потому что менеджер по расположению мог бы игнорировать то свойство. В моем случае контейнер является самым верхним, и в первом тесте он работал.

3
ответ дан 4 December 2019 в 11:09
поделиться

Не устанавливайте ни один из размеров на текстовом поле. Вместо этого установите размер столбца на ненулевое значение через setColumns или использование конструктора с аргументом столбца.

То, что происходит, - то, что предпочтительный размер, о котором сообщает JTextComponent, когда столбцы нуль, является всей суммой пространства, должен был представить текст. Когда столбцы установлены на ненулевое значение, предпочтительный размер является необходимым размером, чтобы показать что много стандартной ширины столбцов. (для переменного шрифта подачи это обычно близко к размеру нижнего регистра 'm'). Со столбцами, обнуленными, текстовое поле запрашивает столько пространства, сколько это может добраться и протягивание целого контейнера.

Так как у Вас уже есть он в GridBagLayout с заливкой, Вы могли, вероятно, просто установить столбцы на 1 и позволить заливке протянуть ее на основе других компонентов или некоторого другого соответственно небольшого числа.

3
ответ дан 4 December 2019 в 11:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: