`
colorlife
  • 浏览: 132349 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

swing中的JTextArea控制行数

阅读更多

http://blog.csdn.net/findhappy7/archive/2008/05/08/2417490.aspx

 

 

近日做了一个工具用来验证一点东西,开启多线程验证时,把验证过程中的一些结果输出到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
 
*/

package swingstudy;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent;
import javax.swing.text.PlainDocument;

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

public class LimitativeDocument extends PlainDocument{
    
private JTextComponent textComponent;
    
private int lineMax = 10;
    
public   LimitativeDocument(JTextComponent tc,int lineMax){     
        textComponent 
= tc;
        
this.lineMax = lineMax;
    }

    
public   LimitativeDocument(JTextComponent tc){     
        textComponent 
= tc;
    }

    
public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException {
        
        String value 
=   textComponent.getText();   
        
int overrun = 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
 
*/

package swingstudy;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;

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

public class LimitativeTextArea extends JFrame{

    
private JTextArea logInfo;
    
private JTextField content;
    
private JButton addButton;
    
private final int contentMax = 5;
    
    
public LimitativeTextArea(){
        initComponent();
    }

    
    
private void initComponent(){
        Container pane  
= getContentPane();
        pane.setLayout(
new BorderLayout());
        
        logInfo 
= new JTextArea(22,9);
        logInfo.setDocument(
new LimitativeDocument(logInfo,contentMax));
        pane.add(
new JScrollPane(logInfo),BorderLayout.CENTER);
        
        content 
= new JTextField(18);
        addButton 
= new JButton("Submit");
        JPanel contentPanel 
= new JPanel();
        contentPanel.add(content);
        contentPanel.add(addButton);
        pane.add(contentPanel,BorderLayout.SOUTH);
        
        InputListener listener 
= new InputListener();
        content.registerKeyboardAction(listener,KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 
0false),JComponent.WHEN_FOCUSED);
        
        addButton.addActionListener(listener);
    }

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

    
private void appendContent(){
        String contentText 
= content.getText();
        
if(!contentText.equals("")){
            logInfo.append(contentText
+" ");
            logInfo.setCaretPosition(logInfo.getText().length());
        }

        content.setText(
"");
    }

    
    
public static void main(String[] args) {
        
new LimitativeTextArea().showFrame();
    }


    
class InputListener extends MouseAdapter implements ActionListener{

        
public void actionPerformed(ActionEvent e){
            
            executeClick();
        }

        
public void mouseClicked(MouseEvent event){
            executeClick();
        }

        
private void executeClick(){
            appendContent();
        }

    }

}

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

分享到:
评论

相关推荐

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

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

    Java_Swing的复杂控件

    JTextArea也提供了多种常用方法,例如append(String str)将给定文本追加到文档结尾、String getText()返回JTextArea中的内容、int getLineCount()返回JTextArea中的当前文本所占的行数、setLineWrap(boolean wrap)...

    java 使用JTextArea组件

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

    Java Swing中的文本框(JTextField)与文本区(JTextArea)使用实例

    在Java Swing中,文本框(JTextField)和文本区(JTextArea)是两个常见的组件,用于接收用户的文本输入。它们是构建用户界面的重要元素,通常用于数据输入或者多行文本展示。 一、JTextField(文本框)的使用 1. 构造...

    swing窗体控件学习文档

    11. **Layout Managers**:Swing提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout和BoxLayout,用于控制组件在容器中的位置和大小。 12. **Event Handling**:Swing通过监听器模型...

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

    JDialog是Java Swing库中的一个组件,它用于创建独立于主应用程序窗口的对话框。而JTextArea则是一个多行文本输入组件,适合用来展示或编辑大量文本数据。 首先,我们来深入理解JDialog。JDialog是JFrame的子类,...

    swing写的文本编辑器

    在Swing中,主要使用`javax.swing.*`包下的类来构建GUI,例如`JFrame`作为窗口的基础,`JPanel`用于组织组件,`JTextArea`用于显示和编辑文本,`JMenuBar`和`JMenu`用于创建菜单栏和子菜单,` JMenuItem`则表示菜单...

    java的swing 自学例题~

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

    深入浅出swing程序源代码

    13. **Layout Managers**: Swing 提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout和GridBagLayout,它们负责控制组件在容器内的排列方式。 通过这个“深入浅出Swing程序源代码”,开发者可以逐一...

    swing 组件 demo

    Swing是Java编程环境中用于构建图形用户界面(GUI)的一个库,它是Java Foundation Classes (JFC)的一部分。Swing提供了一系列组件,使得开发者能够创建功能丰富的、美观的应用程序。在这个"Swing组件demo"中,我们...

    javaSwing常用的组件

    13. **Layout Managers**: Swing 提供了多种布局管理器,如BorderLayout、GridLayout、FlowLayout、BoxLayout和GridBagLayout,用于控制组件在容器中的位置和大小。 在Java Swing开发中,理解并熟练使用这些组件是...

    JAVA Swing实现记事本

    接下来,`JTextArea` 是Swing中的一个多行文本输入组件,用于显示和编辑文本。在这个记事本程序中,`JTextArea` 将作为用户输入和查看文本的主要区域。可以通过设置其属性如行数、列数,以及启用或禁用编辑功能来...

    基于Swing的类似编辑器的界面

    例如,在一个大的代码编辑器中,如果代码行数过多,JScrollPane可以使用户无需缩放就能浏览全部内容。滚动面板通常包裹在其他组件(如JTextArea或JTable)外部,以提供垂直和水平滚动的功能。 在这个"基于Swing的...

    Swing常用组件之多行文本区JTextArea

    在Java的Swing库中,`JTextArea`是用于创建多行文本输入的组件,它允许用户在多个行内输入和查看文本。`JTextArea`适用于各种需要用户输入多行文本的应用场景,如简单的文本编辑器或日志查看器。在本节中,我们将...

    JAVA Swing常用组件

    1. **JFrame**: JFrame是Swing中的顶级容器,用于创建窗口应用程序的基础。你可以在这个框架中添加其他组件,如按钮、文本框等。 2. **JPanel**: JPanel是一个轻量级组件,通常用来组织和管理其他组件。它可以被...

    Swing方式建立数据库

    在Swing中创建数据库连接通常涉及到使用Java Database Connectivity (JDBC) API来与不同的数据库管理系统进行交互,如SqlServer和MySql。以下是Swing与数据库交互的一些关键知识点: 1. **JDBC简介**: JDBC是Java...

    java swing综合程序

    在"Java Swing综合程序"中,我们将深入探讨如何使用Swing组件构建一个功能丰富的用户界面,包括菜单栏(JMenuBar)、工具栏(JPopupMenu)、组合框(JComboBox)、复选框(JCheckBox)和单选按钮(JRadioButton),...

    JAVA_Swing

    4. JTextArea:用于输入多行文本,可配置行数和列数。 5. JLabel:用于显示文本或图像。 6. JComboBox:下拉选择框,用户可以选择其中一个预设选项。 7. JCheckBox和JRadioButton:复选框和单选按钮,用于用户提供...

    如何在整个数组列表的jtextarea中显示结果

    JTextArea是Java Swing提供的一种组件,它允许用户输入和查看多行文本。下面将详细解释如何在JTextArea中有效地显示数组列表中的所有数据。 首先,我们需要创建一个JTextArea实例。这可以通过调用`new JTextArea()`...

Global site tag (gtag.js) - Google Analytics