关于jTextArea 请问jTextArea如何取得当前的行数,我用jTextArea1.getRows或者getLineCounts得到的数好象是不会随当前文本的行数变化的,请问这两个方法又各是什么意思呢多谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用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(); }} 多谢老大回复发现getLineCount是根据回车判断行数的,但是在我的jTextArea里禁用了回车,设置了lineWrap自动换行,这样的话getLineCount返回的结果就一直是1了。。请问有什么解决方法吗。。另外,构造时设置的Rows有什么作用呢? 可以取当前字体,构造一个FontMetrics对象,然后用这个对象计算你所有字符串的长度,然后除以组件的宽度,这样应该可以求出行数,不过可能有一定的误差。 我用的就是这个方法哈。我想实现的是竖排文字实现方法是:构造了fontMetrics,宽度设为字的宽度,高度设为字体高度*字的个数。。这样的问题是如果输入半角空格的话,高度增长了一个汉字的高度。所以想通过读出textArea行数的方法来解决。 行这个单位的位置具有不确定性,所以很少使用,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(); }} 多谢老大实在太强了。居然有这样的方法用了以后问题完全解决了。。还想请问下。。这个方法可以代替metrics吗? FontMetrics可以用在任何swing组件,而modelToView(int pos)方法只能应用于继承了JTextComponent的文本域组件。 java代码 宠 物 商 店 分享。 关于RandomAccessFile对象引用的问题 HashSet中remove()只删除相同对象吗? 面板显示的问题 一个菜鸟问题 关于jar打包的问题(把文件夹里的所有文件和一个.class文件打成一个jar包)? 闷闷闷,在JBuilder中,为什么我一运行汉字输入法(如:全拼、双拼等),JBuilder程序就会死。 奇怪:编译生成了.class文件后,再用javac.编译就出错了 java中如何实现读写类似vc中结构数据? jview的问题,高手请进~ 子类不能用实例方法去重构父类的static方法 问一下jdk1.4 的按装方法?
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();
}}
发现getLineCount是根据回车判断行数的,但是在我的jTextArea里禁用了回车,设置了lineWrap自动换行,这样的话getLineCount返回的结果就一直是1了。。请问有什么解决方法吗。。另外,构造时设置的Rows有什么作用呢?
我想实现的是竖排文字
实现方法是:构造了fontMetrics,宽度设为字的宽度,高度设为字体高度*字的个数。。
这样的问题是如果输入半角空格的话,高度增长了一个汉字的高度。
所以想通过读出textArea行数的方法来解决。
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();
}}
还想请问下。。这个方法可以代替metrics吗?