我的公司软件有很多形式,到现在为止我们手工编写代码(MVC方式).
我们正在考虑开始使用GUI构建器.
使用Builder时几乎没有问题.
我想向他人学习经验:
我在 JScrollPane 中使用 JTextArea
我想限制可能的最大行数和每行中的最大字符数。
我需要字符串与屏幕上的完全一样,每一行都以 '\n' 结尾(如果后面还有另一行),并且用户将只能在每行中插入 X 行和 Y 字符。
我试图限制行,但由于换行,我不知道到底有多少行,换行是在屏幕上直观地开始新行(因为 JTextArea 的宽度),但在字符串中组件实际上是同一行,没有 '\n' 表示新行。我不知道如何在打字时限制每行中的最大字符数。
有2个阶段:
如果我计算行中的字符数并在行尾插入 '/n' 几乎没有问题,这就是我决定分两个阶段进行的原因。在第一阶段 ehile 用户正在输入我宁愿只限制它的视觉和强制换行或类似的东西。只有在第二阶段,当我保存字符串时,我才会添加 '/n',即使用户没有在行尾输入它!
有没有人有想法?
我知道我将不得不使用 DocumentFilter 或 StyledDocument。
这是仅将行限制为 3 的示例代码:(但不将行中的字符限制为 19)
private JTextArea textArea ;
textArea = new JTextArea(3,19);
textArea .setLineWrap(true);
textArea .setDocument(new LimitedStyledDocument(3));
JScrollPane scrollPane = new JScrollPane(textArea
public class LimitedStyledDocument extends DefaultStyledDocument
/** Field maxCharacters */
int maxLines;
public LimitedStyledDocument(int maxLines) {
maxCharacters = maxLines;
} …Run Code Online (Sandbox Code Playgroud) 我正在使用JTable,在表格底部有一个空行,以便能够在表格中添加新行.
在空行中插入或写入数据后,我自动添加一个新的空行.(它假设像Microsoft视觉表一样)
我正在使用java默认行排序器,
问题是我需要空行一直是最后一行!但在对表格进行排序后,它将成为第一行.
DefaultRowSorter类的" compare(int model1,int model2) "方法获取2个行号,如果第一行的值为null,则返回-1,如果第二行的值为null,则返回1.并且通过-1进行DESCENDING以获得反转顺序.
//Treat nulls as < then non-null
if (v1 == null) {
if (v2 == null) {
result = 0;
} else {
result = -1;
}
} else if (v2 == null) {
result = 1;
} else {
result = sortComparators[counter].compare(v1, v2);
}
if (sortOrder == SortOrder.DESCENDING) {
result *= -1;
}
Run Code Online (Sandbox Code Playgroud)
空行被排序为最小值,并且DESCENDING将是第一行(因为mult乘以-1)并且导致很多问题.
我可以覆盖它,并且在DESCENDING模式下,空行(通常是最后一行)不会多次-1,它将是任何排序后的最后一行.但问题是" compare "方法和它的调用者" Row "内部类在DefaultRowSorter中是私有的.
有没有办法避免排空空行并使其始终排在最后一行?