Сделайте линию в тех же позициях - "\ t" - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь, чтобы все точки были в одинаковом положении.Но только я могу выглядеть так.Не могли бы вы дать мне идеи, чтобы он выглядел более аккуратно?

enter image description here

Ответы [ 4 ]

3 голосов
/ 10 марта 2019

У вас есть несколько вариантов здесь:

  • Создать JTextArea (что, похоже, вы делаете)
    • Присвойте текстовой области моноширинный шрифт
    • Затем отобразите отформатированные строки, используя String.format("%-20s :%20s%n", text1, text2) (числа могут отличаться), чтобы обеспечить правильное выравнивание текста
  • Используйте JTable для хранения и отображения табличных данных
  • Создатьсетка с каждой строкой, содержащей JLabel и JTextField,
    • Форматирование размещения компонентов с использованием GridBagLayout
2 голосов
/ 10 марта 2019

Вы также можете написать свой собственный метод для форматирования вашего String s

public static void main(String[] args) {
    String line1 = "Importe a pagar ";
    String line2 = "Descuento ";
    String line3 = "Importe ";
    String line4 = "Obsequio ";

    String[] correctedStrings = setCorrectAmountOfTabs(line1, line2, line3, line4);

    Arrays.stream(correctedStrings).map(line -> line + " : 50").forEach(System.out::println);
}

private static String[] setCorrectAmountOfTabs(String... lines) {
    if (lines == null || lines.length == 0) return;
    int lengthOfTab = 4;
    int targetAmount = Arrays.stream(lines)
                             .map(line -> line.length() / lengthOfTab)
                             .max(Integer::compare)
                             .get();

    return Arrays.stream(lines)
            .map(line -> {
                int currentAmount = line.length() / lengthOfTab;
                String tabs = IntStream.rangeClosed(0, targetAmount - currentAmount)
                                       .mapToObj(i -> "\t")
                                       .collect(Collectors.joining());
                return line + tabs;
            })
            .toArray(String[]::new);
}

Выполнение этого метода дает следующий результат

Importe a pagar      : 50
Descuento            : 50
Importe              : 50
Obsequio             : 50

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

Если я добавлю к нему дополнительную строку, это даст следующий результат

Importe a pagar                  : 50
Descuento                        : 50
Importe                          : 50
Obsequio                         : 50
Adding a very long line to it    : 50
1 голос
/ 10 мая 2019

это делает один пробел, как будто вы используете вкладку.

1 голос
/ 10 марта 2019

Эти три текста ниже нуждаются в еще одном "\t".Это происходит потому, что текст на левой стороне в первом ряду настолько длинный, что перекрывает второй столбец, следующий фрагмент (после табуляции) должен быть записан в следующую «ячейку».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...