JTextArea有setRows、setColumns之类的method,但是要限制字符输入操作得写监听事件了。
解决方案 »
- java.lang.NoClassDefFoundError: mainwindow/MainWindows Exception in thread "main
- for 循环 如何写
- java的文件操作
- Java中直接Copy文件的方法
- JAVA中 (int/Integer + “”)转换成String 执行效率更高?
- 一个小问题,JSP引入包的问题!~
- java 如何将EBCDIC码转成Ascii码字符!!!急,谢谢!!!!!
- 请问如何将一个图片或一个Frame窗口添加到JPanel上
- 怎么求三维数组各维的长度?
- Tomcat+IIS+Apache 配置全攻略
- 如何调用内部类的方法
- 请问,在哪能下载JAVA 3D包
只要XX(JTextArea实例名).setRows(20);就可以了?那每出现20个“,”就自动换行的监听事件应该如何实现呢?
setRows()或者setColumns()这两个方法无效啊~
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();
}}<------ 树欲静而风不止 ------>
(比如说是导入一个txt文本文件)你的方法还行得通吗?
再了不起就用textField.getDocument() 再AddListener;说说就算呵呵。
你是在请教问题,拜托~~~~~谦虚一点,大家花费时间都是想帮上忙,这样的语气实在让人没有心情再给你解答。<------ 树欲静而风不止 ------>
向你道歉,我的语气的确太尖酸了。其他的朋友,如果我的语气让你感觉不舒服,在下一并赔礼了。 *^ ^*关于你的方法,我也进行了测试,发现仅当完全是键盘敲入的时候,才能够生效。
当是其他方法向里面增添文本(比如说粘贴进去或者干脆直接载入一个文本文件),对键盘的监听自然就不会起作用。而且,你的方法有一点会出问题,就是当超过限定的范围后,强制性地不管键盘输入什么,都转化成“\0”来阻止其生效,这种方法对一些特殊的键盘键是无效的(比如说delete)。我正在考虑可不可以通过正则表达式来规范输入的格式呢。
可惜目前还没试验成功。
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();
}
}<------ 树欲静而风不止 ------>
如果被逼入绝境,我就用线程!
----------------------------------------
但是不是真的会陷入死循环呢?考虑中
应该是第一次事件被激发时,会执行action, 这时此事件处理线程应是被阻塞的直至function返回。然后事件消息队列里的第二次激发事件才会又被执行。只要第二此事件处理的运行结果不再再次激发文档内容变化的事件,就应该不会再此循环了吧。
嘿嘿,还是空想中关注结果