请问jTextArea如何取得当前的行数,我用jTextArea1.getRows或者getLineCounts得到的数好象是不会随当前文本的行数变化的,请问这两个方法又各是什么意思呢
多谢了

解决方案 »

  1.   

    用getLineCount()方法,getRows()是在构造的时候设置的import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;public class Test extends JFrame { private static final long serialVersionUID = -2397593626990759111L; private JScrollPane scrollPane = null;

    private JTextArea text = null;

    private JButton button = null; public Test() {
    super("JTextArea Row Test");
    text = new JTextArea();
    scrollPane = new JScrollPane(text);
    this.getContentPane().add(scrollPane);
    button = new JButton("获取JTextArea中现在的行数");
    button.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    System.out.println(text.getLineCount());
    }});
    this.getContentPane().add(button, BorderLayout.NORTH);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(300, 200);
    this.setVisible(true);
    } public static void main(String args[]) {
    new Test();
    }}
      

  2.   

    多谢老大回复
    发现getLineCount是根据回车判断行数的,但是在我的jTextArea里禁用了回车,设置了lineWrap自动换行,这样的话getLineCount返回的结果就一直是1了。。请问有什么解决方法吗。。另外,构造时设置的Rows有什么作用呢?
      

  3.   

    可以取当前字体,构造一个FontMetrics对象,然后用这个对象计算你所有字符串的长度,然后除以组件的宽度,这样应该可以求出行数,不过可能有一定的误差。
      

  4.   

    我用的就是这个方法哈。
    我想实现的是竖排文字
    实现方法是:构造了fontMetrics,宽度设为字的宽度,高度设为字体高度*字的个数。。
    这样的问题是如果输入半角空格的话,高度增长了一个汉字的高度。
    所以想通过读出textArea行数的方法来解决。
      

  5.   

    行这个单位的位置具有不确定性,所以很少使用,JTextComponent有一个方法可以把Text模型中给定位置转换为视图坐标系统中的位置,这个方法很有用:
    public Rectangle modelToView(int pos) throws BadLocationException
    有了坐标,剩下的就比较好办了:import java.awt.BorderLayout;
    import java.awt.Rectangle;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.text.BadLocationException;public class Test extends JFrame { private static final long serialVersionUID = -2397593626990759111L; private JScrollPane scrollPane = null; private JTextArea text = null; private JButton button = null; public Test() {
    super("JTextArea Row Test");
    text = new JTextArea(
    "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    text.setLineWrap(true);
    scrollPane = new JScrollPane(text);
    this.getContentPane().add(scrollPane);
    button = new JButton("获取JTextArea中现在的行数");
    button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
    try {
    String str = text.getText();
    Rectangle rec = text.modelToView(str.length());
    System.out.println(rec.y / rec.height + 1);
    } catch (BadLocationException e) {
    e.printStackTrace();
    }
    }
    });
    this.getContentPane().add(button, BorderLayout.NORTH);
    this.setSize(300, 200);
    this.setVisible(true);
    } public static void main(String args[]) {
    new Test();
    }}
      

  6.   

    多谢老大实在太强了。居然有这样的方法用了以后问题完全解决了。。
    还想请问下。。这个方法可以代替metrics吗?
      

  7.   

    FontMetrics可以用在任何swing组件,而modelToView(int pos)方法只能应用于继承了JTextComponent的文本域组件。