Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTextArea:限制字符串宽度和行数?_Java_Swing_Jtextfield_Jtextarea_Word Wrap - Fatal编程技术网

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

Java JTextArea:限制字符串宽度和行数?,java,swing,jtextfield,jtextarea,word-wrap,Java,Swing,Jtextfield,Jtextarea,Word Wrap,用户需要输入要打印在固定大小标签上的文本。给定字体,标签具有固定的行数和像素宽度。我如何使JTextArea(或者Swing中的其他东西,如果有其他选项)适应这个用例 最大行数 不超过某个像素宽度的每行字符 试图超过最大像素宽度的行在字级别从一行到另一行的文本换行 我有一个纯文档,它根据字符串的像素宽度限制单行文本的长度,以大写字母Ws(我字体中最宽的字符)为单位: 公共类StandardDocument扩展了PlainDocument{ /******变数*****************

用户需要输入要打印在固定大小标签上的文本。给定字体,标签具有固定的行数和像素宽度。我如何使JTextArea(或者Swing中的其他东西,如果有其他选项)适应这个用例

  • 最大行数
  • 不超过某个像素宽度的每行字符
  • 试图超过最大像素宽度的行在字级别从一行到另一行的文本换行
我有一个纯文档,它根据字符串的像素宽度限制单行文本的长度,以大写字母Ws(我字体中最宽的字符)为单位:

公共类StandardDocument扩展了PlainDocument{
/******变数**********************************************/
公共布尔大写=true;
私有整数文本限制;
私有int文本宽度;
私有整型字段宽度;
私有JTextField textField=新JTextField();
/**获取此文本字段的最大宽度,单位为大写Ws。
*@returntextwidth-int
**/
公共int getTextWidth(){
返回文本宽度;
}
/**获取此文本字段的最大宽度(以像素为单位)。
*@returntextwidth-int
**/
受保护的整型getFieldWidth(){
返回场宽度;
}
/**自动“清洗”用户值后插入用户提供值的核心方法**/
public void insertString(int offs、String str、AttributeSet attr)引发BadLocationException{
如果(str==null){return;}
//当值在字段的字符限制内时,设置字段值。
如果(文本宽度>0){
int attemptedWidth=textField.getFontMetrics(Constants.defaultFontLabels).stringWidth(getText(0,getLength())+str);
如果(尝试宽度>字段宽度){
返回;
}
}
//在字段中设置值。
super.insertString(offs、str、attr);
}
/**将最大文本宽度设置为此字段可容纳的最大大写字母数**/
公共void setTextWidth(int-wLimit){
如果(wLimit>=0){
textWidth=wLimit;
StringBuffer outputBuffer=新的StringBuffer(wLimit);
对于(int i=0;i
包装由JTextArea支持。您可以使用以下方式打开它:

textArea.setLineWrap( true );
textArea.setWrapStyleWord( true );
行计数会有点困难,因为在文档更新之前,您不知道新添加的文本是否会导致换行

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

或者,您可以自动将文本插入到文档中。然后检查行数。如果大于最大值,则显示一条消息,然后立即调用
remove(…)
方法

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