当前位置: 首页 > 知识库问答 >
问题:

JTextArea:限制字符串宽度和行数?

唐煜
2023-03-14
    null

我有一个PlainDocument,它根据字符串的像素宽度限制单行文本的长度,以大写Ws(我字体中最宽的字符)度量:

public class StandardDocument extends PlainDocument {

    /****** VARIABLES **********************************************/
    public boolean upperCase = true;
    private int textLimit;
    private int textWidth;
    private int fieldWidth;
    private JTextField textField = new JTextField();


    /** Get the maximum width of this text field, measured in capital Ws.
     *  @return textWidth - int
     **/
    public int getTextWidth() {
        return textWidth;
    }

    /** Get the maximum width of this text field, measured in pixels.
     *  @return textWidth - int
     **/
    protected int getFieldWidth() {
        return fieldWidth;
    }

    /** Core method for inserting value provided by user after "cleaning" user's value automatically. **/
    public void insertString(int offs, String str, AttributeSet attr) throws BadLocationException {

        if (str == null) { return; }

       // Set field value when value is within character limit of field.
        if (textWidth > 0) {
            int attemptedWidth = textField.getFontMetrics(Constants.defaultFontLabels).stringWidth(getText(0, getLength()) + str);
            if (attemptedWidth > fieldWidth) {
                return;
            }
        }

         // Set value in field.
        super.insertString(offs, str, attr);
    }

    /** Set the maximum text width as a maximum number of capital Ws this field may hold. **/
    public void setTextWidth(int wLimit) {
        if (wLimit >= 0) {
            textWidth = wLimit;
            StringBuffer outputBuffer = new StringBuffer(wLimit);
            for (int i = 0; i < wLimit; i++){
               outputBuffer.append("W");
            }
            fieldWidth = textField.getFontMetrics(Constants.defaultFontLabels).stringWidth(outputBuffer.toString());
        }
    }
}

共有1个答案

郭俊人
2023-03-14

JTextArea支持包装。您可以使用以下方式打开它:

textArea.setLineWrap( true );
textArea.setWrapStyleWord( true );

行计数会稍微困难一些,因为在文档更新之前,您不知道新添加的文本是否会导致行换行。

因此,您可能需要一个交叉编辑,可以在单击“打印”按钮时调用该编辑。也许您可以使用Text Utilities类中的getWrappedLines(...)方法。如果换行线大于最大值,则阻止打印。

 类似资料:
  • 必须使用可变宽度字体(因为它看起来很漂亮)。 必须以特定字符宽度换行文本(以匹配文本UI) 一个简单的连击实现,是吗?修改UI以提供我自己版本的包装视图(它继承自WrappedPlainView),并重写calculateBreakPosition()以提供我想要的包装行为。 只是看起来不那么简单。正在忽略由可变呈现宽度派生的问题...我发现calculateBreakPosition()没有被调

  • 问题内容: 我正在寻找一种方法来限制php中的字符串,并在字符串过长时在末尾添加…。 问题答案: 您可以使用类似于以下内容的东西:

  • 本文向大家介绍jQuery 限制输入字符串长度,包括了jQuery 限制输入字符串长度的使用技巧和注意事项,需要的朋友参考一下 我们后台做程序的时候,比如录入一篇文章,文章会有摘要,我们希望文章的字符长度是我们可以控制的,我们不希望它太长,比如限制只能输入250个字符,下面的代码实现了这种功能。 先来看一下效果图 代码如下: 以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持呐喊教程

  • 问题内容: 我刚刚开始学习我的第一种真正的编程语言Python。我想知道如何将用户输入限制为特定字符和特定长度。例如,如果用户输入的字符串包含除字母以外的任何内容,我想显示一条错误消息,并且我想显示其中一个用户输入的字符超过15个。 第一个似乎是我可以使用正则表达式做的事情,由于我已经在Java语言中使用过它们,所以我对此有所了解,但是我不确定如何在Python中使用它们。第二个,我不确定该如何处

  • 我假设这不是正确的格式。有人知道我如何在java中正确地做到这一点吗?

  • 问题内容: 我有以下几点: 有没有一种方法可以将字符串的长度限制为20个字符? 还有一个更好的问题是,如果超过20个字符,有没有办法我可以将字符串更改为截断并显示在末尾? 问题答案: 编辑 最新版本的报价过滤器。 您需要这样的 自定义过滤器 : 用法: 选项: 逐字(布尔)-如果为true,则仅按字数限制切入, max(整数)-文本的最大长度,切成此字符数, tail(字符串,默认值:“…”)-如