Java 使线条处于相同的位置-“\";

Java 使线条处于相同的位置-“\";,java,regex,string,eclipse,swing,Java,Regex,String,Eclipse,Swing,我试图让所有的观点都处于相同的位置。 但只有我能让它看起来像这样。 你能给我一些使它看起来更整洁的主意吗 下面这三个文本需要另一个“\t”。之所以会出现这种情况,是因为第一行左侧的文本太长,与第二列重叠,下一部分(制表符之后)必须写入下一个“单元格”。您在这里有几个选项: 创建一个JTextArea(看起来你正在这么做) 为文本区域指定单间距字体 然后使用String.format(“%-20s:%20s%n”,text1,text2)”显示格式化的字符串(数字可能会有所不同),以便正确对齐

我试图让所有的观点都处于相同的位置。 但只有我能让它看起来像这样。 你能给我一些使它看起来更整洁的主意吗


下面这三个文本需要另一个
“\t”
。之所以会出现这种情况,是因为第一行左侧的文本太长,与第二列重叠,下一部分(制表符之后)必须写入下一个“单元格”。

您在这里有几个选项:

  • 创建一个JTextArea(看起来你正在这么做)
    • 为文本区域指定单间距字体
    • 然后使用
      String.format(“%-20s:%20s%n”,text1,text2)”显示格式化的字符串
      (数字可能会有所不同),以便正确对齐文本
  • 使用JTable保存和显示表格数据
  • 创建一个网格,每行包含一个JLabel和一个JTextField,
    • 使用GridBagLayout设置零部件放置的格式

您也可以编写自己的方法来格式化
字符串

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
Importe a pagar                  : 50
Descuento                        : 50
Importe                          : 50
Obsequio                         : 50
Adding a very long line to it    : 50
然后,您可以操作输出
字符串
数组,以便在组件内部使用它。这就保证了无论你最长的
字符串长度如何,你都会有同样的行为

如果我向它添加一个额外的行,它将给出以下结果

Importe a pagar      : 50
Descuento            : 50
Importe              : 50
Obsequio             : 50
Importe a pagar                  : 50
Descuento                        : 50
Importe                          : 50
Obsequio                         : 50
Adding a very long line to it    : 50

另一个想法是:在较短的字符串中添加空格,以便\t在同一列中是的,这取决于另一列必须位于的位置。
\t
对于所有情况下的正确排列来说,单独使用太愚蠢了。您需要使用字符串的长度正确计算偏移量,然后用空格填充它。请参阅(您可以使用与
String#format
相同的格式语法,单空格字体使操作更简单)。