`
kanwoerzi
  • 浏览: 1678650 次
文章分类
社区版块
存档分类
最新评论

swing中的JTextArea控制行数(修改一下可以改为控制字符数)

 
阅读更多

近日做了一个工具用来验证一点东西,开启多线程验证时,把验证过程中的一些结果输出到JTextArea面板中,早就知道TextArea没有提供控制字符或者控制行数的功能,只不过我以前的输出内容不会太多,昨天的程序输出太多内容了,竟然导致抛出了异常,所以今天想办法实现控制它的行数。具体做法是自己继承PlainDocument类重写insertString方法,然后把JTextArea的Document设置为自己的这个类,只要在insertString方法中做些判断,如果超过设置的最大值,就调用AbstractDocument中的remove(int offs, int len)方法,可以把旧的内容删除掉,追加新的内容了,截图就不截了,示意代码如下(两个类文件):

自定义的Document类LimitativeDocument.java:

/***//**
*project:study
*package:swingstudy
*file:LimitativeDocument.java
*date:2007-10-24
*/

packageswingstudy;

importjavax.swing.text.AttributeSet;
importjavax.swing.text.BadLocationException;
importjavax.swing.text.JTextComponent;
importjavax.swing.text.PlainDocument;

/***//**
*description:自定义的Document
*可以控制最大行数
*默认最大为10行
*超过最大行时,上面的一行将被截取
*
*
*Copyright(c)SurfilterTechnologyCo.,Ltd
*
@authorPurpleMaple--zhangyixuan(张逸轩)
*@date2007-10-24上午10:24:34
*/

publicclassLimitativeDocumentextendsPlainDocument...{
privateJTextComponenttextComponent;
privateintlineMax=10;
publicLimitativeDocument(JTextComponenttc,intlineMax)...{
textComponent
=tc;
this.lineMax=lineMax;
}

publicLimitativeDocument(JTextComponenttc)...{
textComponent
=tc;
}

publicvoidinsertString(intoffset,Strings,AttributeSetattributeSet)throwsBadLocationException...{

Stringvalue
=textComponent.getText();
intoverrun=0;
if(value!=null&&value.indexOf(' ')>=0&&value.split(" ").length>=lineMax)...{
overrun
=value.indexOf(' ')+1;
super.remove(0,overrun);
}

super.insertString(offset-overrun,s,attributeSet);
}

}

负责显示的LimitativeTextArea类:

/***//**
*project:study
*package:swingstudy
*file:LimitativeTextArea.java
*date:2007-10-24
*/

packageswingstudy;

importjava.awt.BorderLayout;
importjava.awt.Container;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.KeyEvent;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;

importjavax.swing.JButton;
importjavax.swing.JComponent;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
importjavax.swing.KeyStroke;

/***//**
*description:输入文字的面板
*它的JTextArea可以控制最大行数
*默认最大为10行
*超过最大行时,上面的一行将被截取
*
*Copyright(c)SurfilterTechnologyCo.,Ltd
*
@authorPurpleMaple--zhangyixuan(张逸轩)
*@date2007-10-24上午10:25:41
*/

publicclassLimitativeTextAreaextendsJFrame...{

privateJTextArealogInfo;
privateJTextFieldcontent;
privateJButtonaddButton;
privatefinalintcontentMax=5;

publicLimitativeTextArea()...{
initComponent();
}


privatevoidinitComponent()...{
Containerpane
=getContentPane();
pane.setLayout(
newBorderLayout());

logInfo
=newJTextArea(22,9);
logInfo.setDocument(
newLimitativeDocument(logInfo,contentMax));
pane.add(
newJScrollPane(logInfo),BorderLayout.CENTER);

content
=newJTextField(18);
addButton
=newJButton("Submit");
JPanelcontentPanel
=newJPanel();
contentPanel.add(content);
contentPanel.add(addButton);
pane.add(contentPanel,BorderLayout.SOUTH);

InputListenerlistener
=newInputListener();
content.registerKeyboardAction(listener,KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,
0,false),JComponent.WHEN_FOCUSED);

addButton.addActionListener(listener);
}


publicvoidshowFrame()...{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(
false);
setSize(
500,400);
setLocationRelativeTo(
null);
setVisible(
true);
}

privatevoidappendContent()...{
StringcontentText
=content.getText();
if(!contentText.equals(""))...{
logInfo.append(contentText
+" ");
logInfo.setCaretPosition(logInfo.getText().length());
}

content.setText(
"");
}


publicstaticvoidmain(String[]args)...{
newLimitativeTextArea().showFrame();
}


classInputListenerextendsMouseAdapterimplementsActionListener...{

publicvoidactionPerformed(ActionEvente)...{

executeClick();
}

publicvoidmouseClicked(MouseEventevent)...{
executeClick();
}

privatevoidexecuteClick()...{
appendContent();
}

}

}

如果有正好需要这方面功能的可以参考一下,如果您看到的是转载的文章,请记得原地址是http://blog.csdn.net/cleverfoxloving

分享到:
评论

相关推荐

    java_JTextArea_实现不可修改文本内容、右键菜单

    ### Java Swing JTextArea 实现不可修改文本内容及右键菜单定制 #### 一、概述 在Java Swing开发中,`JTextArea` 是一个非常常用的组件,用于显示或编辑多行文本。有时候,我们可能需要创建一个只读的文本区域或者...

    swing中文乱码问题(Linux和window)

    对于Swing应用,可以在项目的启动类中添加如下代码: ```java public static void main(String[] args) { System.setProperty("file.encoding", "UTF-8"); // 其他代码... } ``` **第八步:** 如果仍然存在乱码...

    重定向log4j日志到jtextarea

    而JTextArea是Swing组件库中的一个文本区域,常用于显示多行文本,用户可以读取但不能编辑。在某些情况下,我们可能希望将Log4j的日志输出直接重定向到JTextArea,以便于在GUI应用程序中实时查看日志信息。这在调试...

    java swing-JTextArea的使用

    JTextArea是Swing库提供的一个多行文本编辑框组件,可以用于在GUI应用程序中显示和编辑大段文本。

    swing jtextArea滚动条和文字缩放效果

    swing jtextArea是Java Swing中的一种组件,用于显示多行文本。今天,我们将详细介绍swing jtextArea滚动条和文字缩放效果,并提供了相关的代码实例。 首先,让我们了解一下swing jtextArea的基本概念。swing ...

    Java弹出菜单,为JTextArea添加了右键弹出式菜单,实现了复制、粘贴、剪切

    在本文中,我们学习了如何使用 Java 弹出菜单来为 JTextArea 添加右键弹出式菜单,实现复制、粘贴、剪切功能。我们还了解了 JPopupMenu、JMenuItem、Clipboard、DataTransfer、KeyStroke 和 Accelerator 等类的使用...

    JAVA swing中文离线API文档

    Swing的布局管理器是控制组件在容器中排列的方式。有多种内置的布局管理器,如`FlowLayout`、`BorderLayout`、`GridLayout`、`BoxLayout`和`GridBagLayout`。每种布局管理器都有其特定的布局策略,开发者可以根据...

    Java_Swing的复杂控件

    例如JTextArea()构造新的TextArea、JTextArea(Document doc)构造新的JTextArea,使其具有给定的文档模型,所有其他参数均默认为(null, 0,0)和JTextArea(int rows,int columns)构造具有指定行数和列数的新的空...

    java 使用JTextArea组件

    在Java Swing库中,`JTextArea`是一个非常重要的组件,用于在GUI应用程序中显示和编辑多行文本。它主要用于创建类似记事本的文本输入区域,可以用来展示大量的文本数据或者接收用户输入的多行文本。`JTextArea`是`...

    java swing 增删改查

    在这个"java swing 增删改查"的小项目中,我们可以推测开发者利用Swing 创建了一个简单的数据库操作应用,允许用户对数据进行添加、删除、修改和查询。 在Java Swing中,主要涉及以下几个核心知识点: 1. **容器与...

    swing窗体控件学习文档

    它可以配置为只读或可编辑,并且可以设置行数和列数。 7. **JComboBox**:下拉列表控件,允许用户从预定义的选项中选择一个值。 8. **JCheckBox** 和 **JRadioButton**:复选框和单选按钮用于提供多个选择中的一个...

    java+swing入门级增删改查源码

    在Java Swing中,我们可以创建出美观且功能丰富的桌面应用程序。本教程将围绕“Java+Swing入门级增删改查源码”这一主题,介绍如何使用Swing构建一个简单的数据管理应用。 首先,Swing中的组件是轻量级的,这意味着...

    Java Swing JTextArea文本区域的实现示例

    Java Swing JTextArea 文本区域是 Java Swing 库中的一种基本组件,用于编辑多行文本。JTextArea 组件可以编辑多行文本,并提供了许多有用的方法来处理文本。 概述 JTextArea 是 javax.swing.JTextArea 的实例,...

    JTextArea 实现行号

    在Java Swing库中,`JTextArea` 是一个用于显示和编辑多行文本的组件。有时候在编程时,我们可能需要为 `JTextArea` 添加行号功能,以方便用户阅读和编辑代码或者数据。这个功能可以通过自定义边框来实现,就像标题...

    java的swing 自学例题~

    4. JTextArea:用于多行文本输入,可以调整列数和行数。可以使用TextListener或DocumentListener来处理文本变化。 5. JComboBox:下拉列表框,可以填充一个数组或Vector对象,用户可以选择其中的一项。 Swing还...

    swing 组件 demo

    可以调整其行数和列数,并且可以设置是否允许文本选择和编辑。 7. **JComboBox**: JComboBox是一个下拉列表框,可以用于提供一组预定义的选项供用户选择。开发者可以动态添加或删除选项。 8. **JList**: JList显示...

    深入浅出swing程序源代码

    它支持滚动条,并可以通过设置行数和列数来调整大小。 7. **JComboBox**: JComboBox 提供了一个下拉列表供用户选择。开发者可以添加String或其他对象到组合框中。 8. **JList**: JList 用于展示一系列选项,用户...

    JAVA初级编码——继承JDialog, 利用JTextArea显示文档中的内容

    使用JTextArea时,你可以设置其行数和列数,以及是否可编辑。常见的操作包括插入、删除文本,以及获取和设置文本内容。 将JTextArea与JDialog结合,用于显示文档内容,一般需要以下步骤: 1. 创建一个JTextArea实例...

    javaSwing常用的组件

    它可以设置为只读或者可编辑,并且可以设置行数和列数。 6. **JTextField**: JTextField 是一个单行文本输入组件,用于获取用户输入的单行文本。 7. **JComboBox**: JComboBox 是一个下拉列表组件,用户可以选择...

    swing计算器,swing计算器 swing计算器

    在Swing计算器中,开发者会使用诸如JButton、JFrame、JPanel等Swing组件来构建计算器的外观。JFrame作为主窗口,承载着整个计算器的布局;JPanel则用于组织各个按钮,形成计算器的按键区域。每个按钮通常都会关联一...

Global site tag (gtag.js) - Google Analytics