将行放置在相同的位置-“ \ t”

时间:2019-03-10 16:48:36

标签: java string eclipse swing

我正在尝试所有观点都在同一位置。 但只有我能使它看起来像这样。 你能给我一些想法让它看起来更整洁吗?

enter image description here

4 个答案:

答案 0 :(得分:3)

您在这里有几种选择:

  • 创建一个JTextArea(看起来就像您在做的那样)
    • 为文本区域提供等宽字体
    • 然后使用String.format("%-20s :%20s%n", text1, text2)显示格式化的字符串(数字可能会有所不同),以使文本正确对齐
  • 使用JTable来保存和显示表格数据
  • 创建一个网格,每行包含一个JLabel和一个JTextField,
    • 使用GridBagLayout格式化组件的放置位置

答案 1 :(得分:2)

您还可以编写自己的方法来格式化String

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

答案 2 :(得分:1)

下面的这三个文本需要另外的"\t"。发生这种情况的原因是,第一行左侧的文本太长,与第二列重叠,必须将下一段(在制表符之后)写在下一个“单元格”中。

答案 3 :(得分:1)

这样一个空格就像您正在使用制表符。