java中文本行自动换行语句_【原创】JTextArea自动换行时,按行获得文字的解决...

做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();

}

}

很简单的一个例子,由于水平有限,逻辑写的不是很清楚,希望大家帮我完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值