JAVA如何在不考虑字符长度的情况下对齐JTextArea中的文本

JAVA如何在不考虑字符长度的情况下对齐JTextArea中的文本,java,swing,Java,Swing,以下是我的JTextArea的图片: 这是我的密码: String display = ""; display = display + num + "\t\t" + name + "\t\t\t\t\t\t\t\t" + stocks + "\t\t\t" + req +"\n"; txtArea.setText(display); 我应该怎么做才能使文本正确对齐,而不考虑单词的字符长度 尽可能多地使用JTextArea not JTable(因为我还不熟悉它) 提前谢谢你

以下是我的JTextArea的图片:

这是我的密码:

String display = "";
display = display + num + "\t\t" + name + "\t\t\t\t\t\t\t\t" +
        stocks + "\t\t\t" + req +"\n";

txtArea.setText(display);
我应该怎么做才能使文本正确对齐,而不考虑单词的字符长度

尽可能多地使用JTextArea not JTable(因为我还不熟悉它)
提前谢谢你

正如上面@AndyTurner所提到的,您最好的方法是依靠字符串格式化程序来设置要打印的每个变量的字符宽度,并且能够右对齐或左对齐。所以在你的情况下,当你离开时,一切都可能是这样的:

String display = "";
// just add values accordingly the best way to get the result you 
// want is to mess around with formatting until you have the values
// where you want them in the textfield.
display = String.format("%20s %10s%n", value1, value2);

//display = display + num + "\t\t" + name + "\t\t\t\t\t\t\t\t" +
//    stocks + "\t\t\t" + req +"\n";

txtArea.setText(display);
txtArea.setText(String.format("%-3s%-20s%-5s%-5s%n", num, name, stocks, req));
在这个例子中,我为
num
分配了
3个
字符,为
name
分配了
20个
,为
股票
req
分配了
5个


更多详细信息

使用
JTextPane
而不是
JTextArea
,因为这可以HTML。然后添加一个HTML
。可能有一些款式

StringBuilder display = new StringBuilder("<html><table>");

display.append("<tr><td align='right'>").append(num)
        .append("</td><td>").append(name)
        .append("</td><td align='right'>").append(stocks)
        .append("</td><td>").append(req)
        .append("</td></tr>");

display.append("</table>");
txtPane.setText(display.toString());
StringBuilder显示=新建StringBuilder(“”);
display.append(“”).append(num)
.append(“”)。append(名称)
.append(“”)。append(股票)
.append(“”)。append(请求)
.附加(“”);
显示。追加(“”);
setText(display.toString());
这允许比例字体和样式文本,如粗体、红色、背景色

我想使用JTextArea not JTable(因为我还不熟悉它)

现在是熟悉JTable的时候了。为作业使用适当的组件,这就是存在多个组件的原因。不要试图把一个正方形的钉子装进一个圆孔里

JTextArea不是这种格式的合适组件

相反,您应该使用
JTable
JTable
用于以行/列格式显示数据。有关更多信息和工作示例,请查看上的Swing教程部分

如果必须使用文本组件,请使用JTextPane。可以手动设置选项卡的值,使所有文本对齐。这种方法的问题再次是,您需要确定每个选项卡的大小。这意味着要么对每列的大小进行随机猜测,要么遍历所有数据以确定大小。当然,这会使代码复杂化。参见:示例


同样,更好的解决方案是学习如何使用Swing。使用例如
String.format(“%20s%10s%n”,value1,value2)
以给定的列宽打印值。是的,我现在将练习JTable。非常感谢。回答问题,但不是解决问题的正确方法。任何时候你必须选择一个“神奇的数字”,你应该寻找一个更好的解决方案。您需要为每个列选择一个大小。但如果列中有一个值超出范围,该怎么办?如果将数字设置得太高,则行中浪费的空间太多,用户必须滚动才能查看所有数据。如果它太小,那么数据将变得不对齐。这是正确的,除非数据来自关系数据库,就像现在的大多数应用程序一样,因为在这种情况下,在表定义中设置字段时,您知道每个字段的长度,所以它仍然有意义。和往常一样,这取决于目标应用程序的确切上下文……但关键是,即使它来自数据库,它们也会设置一个很大的数字,比如50。这并不意味着您要为大量的数据保留空间,因为大多数时间您可能只有20个。因此,您将视图规划为显示20(这样您就不会在视图中浪费空间),但考虑到50的可能性。这就是为什么像JTable这样的东西是更好的解决方案。您可以设计表格,使列的默认宽度显示20个字符。但是,用户可以在需要时临时调整列的大小以查看整个名称。