JTextArea有setRows、setColumns之类的method,但是要限制字符输入操作得写监听事件了。

解决方案 »

  1.   

    楼上的意思是,如果我限制其行数最多20行
    只要XX(JTextArea实例名).setRows(20);就可以了?那每出现20个“,”就自动换行的监听事件应该如何实现呢?
      

  2.   

    。刚刚Test过
    setRows()或者setColumns()这两个方法无效啊~
      

  3.   

    创建对象时输入行数列数的参数,是在JTextArea初始化的时候,规定其一出现会有多少行多少列,并不是规定它就只能这么多行,这么多列……再说,我需要的情况列数并不唯一啊,比如说三个逗号换行,那可能就是六列,也可能是8列,等等,得看逗号前面有多少文字了
      

  4.   

    import java.awt.event.WindowEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyAdapter;
    import javax.swing.JFrame;
    import javax.swing.JTextArea;
    import javax.swing.JScrollPane;public class Test  {
      private JFrame frame;
      private JTextArea textArea;
      private JScrollPane sPan;  public Test() {
        frame = new JFrame();
        textArea = new JTextArea();
        textArea.addKeyListener(new KeyAdapter() {
          public void keyTyped(KeyEvent kt) {
            String str = textArea.getText();
            int row = 1;
            while(str.indexOf("\n")!=-1){
              str = str.substring(str.indexOf("\n")+1);
              row++;
            }
            if(row>5)kt.setKeyChar('\0');//超过5行则不能再输入
            int i = 0;
            while(str.indexOf(",")!=-1){
              str = str.substring(str.indexOf(",")+1);
              i++;
            }
            if(i>=5){//每行超过5个‘,’就插入换行
              if(row<5){
                textArea.insert("\n", textArea.getText().length());
              }else{
                kt.setKeyChar('\0');
              }
            }
          }
        });
        sPan = new JScrollPane(textArea);
        frame.getContentPane().add(sPan);
        frame.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent windowEvent) {
            System.exit(0);
          }
        });
        frame.setSize(600, 400);
        frame.setVisible(true);
      }  public static void main(String[] args) {
        new Test();
      }}<------ 树欲静而风不止 ------>
      

  5.   

    mq612(理想)你的办法的确可以监视键盘的动作但是,如果导致JTextArea中文本产生变化的原因并不是键盘输入而是其他的情况
    (比如说是导入一个txt文本文件)你的方法还行得通吗?
      

  6.   

    上面他是监听了键盘输入事件,那你监听文本框变化时的事件嘛。
    再了不起就用textField.getDocument() 再AddListener;说说就算呵呵。
      

  7.   

    问题表达不明确。
    你是在请教问题,拜托~~~~~谦虚一点,大家花费时间都是想帮上忙,这样的语气实在让人没有心情再给你解答。<------ 树欲静而风不止 ------>
      

  8.   

    mq612(理想)
     
    向你道歉,我的语气的确太尖酸了。其他的朋友,如果我的语气让你感觉不舒服,在下一并赔礼了。 *^ ^*关于你的方法,我也进行了测试,发现仅当完全是键盘敲入的时候,才能够生效。
    当是其他方法向里面增添文本(比如说粘贴进去或者干脆直接载入一个文本文件),对键盘的监听自然就不会起作用。而且,你的方法有一点会出问题,就是当超过限定的范围后,强制性地不管键盘输入什么,都转化成“\0”来阻止其生效,这种方法对一些特殊的键盘键是无效的(比如说delete)。我正在考虑可不可以通过正则表达式来规范输入的格式呢。
    可惜目前还没试验成功。
      

  9.   

    import java.awt.event.WindowEvent;
    import java.awt.event.WindowAdapter;
    import javax.swing.JFrame;
    import javax.swing.JTextArea;
    import javax.swing.JScrollPane;
    import javax.swing.event.DocumentListener;
    import javax.swing.event.DocumentEvent;
    import javax.swing.text.Document;public class Test {
      private JFrame frame;
      private JTextArea textArea;
      private JScrollPane sPan;
      private Document doc;  public Test() {
        frame = new JFrame();
        textArea = new JTextArea();
        doc = textArea.getDocument();
        doc.addDocumentListener(new DocumentListener() {
          //在这里可监听到JTextArea中的任何改变
          public void insertUpdate(DocumentEvent docE) {
            editText();
          }
          public void removeUpdate(DocumentEvent docE) {
            editText();
          }
          public void changedUpdate(DocumentEvent docE) {
            editText();
          }
        });
        sPan = new JScrollPane(textArea);
        frame.getContentPane().add(sPan);
        frame.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent windowEvent) {
            System.exit(0);
          }
        });
        frame.setSize(600, 400);
        frame.setVisible(true);
      }  private void editText() {
        //在本方法中按照你自己的规范写
        System.out.println(textArea.getText());
      }  public static void main(String[] args) {
        new Test();
      }
    }<------ 树欲静而风不止 ------>
      

  10.   

    talent_marquis(甜菜侯爵) 恩,确实容易陷入死循环-------------
    如果被逼入绝境,我就用线程!
    ----------------------------------------
    但是不是真的会陷入死循环呢?考虑中
    应该是第一次事件被激发时,会执行action, 这时此事件处理线程应是被阻塞的直至function返回。然后事件消息队列里的第二次激发事件才会又被执行。只要第二此事件处理的运行结果不再再次激发文档内容变化的事件,就应该不会再此循环了吧。
    嘿嘿,还是空想中关注结果