近日做了一个工具用来验证一点东西,开启多线程验证时,把验证过程中的一些结果输出到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
分享到:
相关推荐
JavaSwing JTextArea 实现不可修改文本内容、右键菜单定制
JTextArea是Swing库提供的一个多行文本编辑框组件,可以用于在GUI应用程序中显示和编辑大段文本。
swing 开发 Linux和window系统解决乱码参考文档,个人总结,不喜勿碰
java 使用JTextArea组件 java 使用JTextArea组件 java 使用JTextArea组件
重定向log4j日志到jtextarea
主要为大家详细介绍了swing jtextArea滚动条和文字缩放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了Java Swing JTextArea文本区域的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
对JAVA中Swing组件有一个很好的讲解,并通过实际的例子给读者一个清晰的认识和掌握!
主要为大家详细介绍了Swing常用组件之多行文本区JTextArea,感兴趣的朋友可以参考一下
JTextArea 实现行号,继承AbstractBorder,jTextArea_1.setBorder(lb);即可添加到JTextArea
java程序文件字符编码转换器 JLabel labsuffix = new JLabel("指定文件的后缀"); JLabel labCharacter = new JLabel("选择转换方式"); JLabel labfiletext = new JLabel("正在处理"); JTextArea jTextArea = new...
主要介绍了Java Swing中的文本框(JTextField)与文本区(JTextArea)使用实例,Swing是一个用于开发Java应用程序用户界面的开发工具包,需要的朋友可以参考下
一个改变JTextArea指定位置文本的背景色的例子
Java弹出菜单,为JTextArea添加了右键弹出式菜单,实现了复制、粘贴、剪切
用java编写的文本编辑器,可以运行.import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileNotFoundException;...
JAVA初级编码,生成JDialog动态窗口,并在窗口中使用 JTextArea显示.txt文件中的内容。
Swing组件(javax.swing.-) 面板:JPanel 标签化窗格:JTabbedPane 拆分窗格:JSplitPane 滚动窗格:JScrollPane 工具栏:JToolBar 桌面窗格:JDesktopPane 内部框架:JInternalFrame 分层窗格:JLayeredPane ...
目录Swing 常用控件1....在 Swing 组件中,最常见的一个控件就是 JFrame,它和 Frame 一样是一个独立存在的顶级窗口,不能放置在其他容器中。JFrame 支持通用窗口所有的基本功能,例如窗口最小化、设定窗口
),使用起来很简单,简单的将文件夹拖拽到GUI界面的JTextArea中去就行了,然后再在工具栏点一下自己喜欢的图标,就能完成更改了~如果是桌面的文件夹,第1次修改会自动呈现,第2次修改则要刷新一下桌面,至于从资源...
swing的日历控件例子,可以在Jframe或jdialog上使用。整体来说实现比较简单,界面还行,有点像网页上的日历控件。传一个jtextarea进去就ok了。