做swing时,遇到到JtextArea设置为自动换行后无法按行来获取输入的文字,我从csdn等技术网站上都没找到解决的办法,最终只能自己动手了。
下面是一个小例子 :
//如有转载请注明出处
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.text.BadLocationException;
import com.pims.media.twodgui.TextArea;
public class TextAreaTest extends JFrame {
private TextArea text = null;
private JButton button = null;
public TextAreaTest() {
super("JTextArea Test");
text = new TextArea();
text.setLineWrap(true);
text.setBorder(BorderFactory.createLineBorder(Color.red,
10));
button = new
JButton("获取JTextArea中的文字");
button.addActionListener(new
ActionListener() {
public void
actionPerformed(ActionEvent arg0) {
ArrayList
textlist=gettext();
for(int
i=0;i
System.out.println("第"+i+"行:"+textlist.get(i));
}
});
this.getContentPane().add(button,
BorderLayout.NORTH);
this.setSize(300, 200);
this.setVisible(true);
}
public ArrayList gettext() {
String str =
text.getText();
ArrayList list = new
ArrayList();
FontMetrics fm =
text.getFontMetrics(text.getFont());
String[] stringarr =
str.split("\n");
int textAreawidth =
text.getWidth()-20;
for (int i = 0; i
< stringarr.length; i++) {
String
selectString = stringarr[i];
if
(fm.stringWidth(selectString) <= textAreawidth)
{
list.add(selectString);
} else
{
int
width = fm.stringWidth(selectString);
int
line = width / textAreawidth
+
(width % textAreawidth > 0 ? 1 : 0);
int
baseindex =selectString.length() / line;
int
start = 0;
int
end = baseindex;
while
(fm.stringWidth(selectString.substring(start, end))
< textAreawidth) {
String
splitStr = selectString.substring(start, end);
if
(end < selectString.length()) {
end=end+1;
String
tmp = selectString.substring(start, end);
if
(fm.stringWidth(tmp) == textAreawidth) {
splitStr=tmp;
list.add(splitStr);
start = end;
if
(baseindex + end > selectString.length())
end
= selectString.length();
else
end
= baseindex + end;
}
else if(fm.stringWidth(tmp) > textAreawidth) {
list.add(splitStr);
end
= end-1;
start=end;
if
(baseindex + end > selectString.length())
end
= selectString.length();
else
end
= baseindex + end;
}
}
else {
list.add(splitStr);
break;
}
}
}
}
return list;
}
public static void main(String args[]) {
new TextAreaTest();
}
}
很简单的一个例子,由于水平有限,逻辑写的不是很清楚,希望大家帮我完善。