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