好久没有更新了,也没有怎么去增加一些知识点,这不,今天,有个JavaSwing的组件里面,需要滚动的,可以上下滚动,和左右滚动,嗯这个,估计也没有人需要完整的滚动组件吧,我这里就简单写一下JTextArea 自动换行吧,计算文本行数的计算方式,我也百度了,但是,并没有什么可用的例子,就自己写了一个,不一定是最好的方式,但是,挺适合我目前的需求的,如果你正好看到,并且需要,可用拿去用用,废话不多说,下面直接开始记录了,呃,还是要说一下哈,并不高端,不喜勿喷,谢谢,
1、主要就是,你收到的滚动消息内容,也就是,你要显示在组件内的文本内容;这里定义为RollMsgString;
2、就是,拿到数据后,对数据进行,设置,换行操作,JTextArea有个方法,直接设置换行的可以,就是
msgArea.setLineWrap(true);
3、就是,定义要显示的宽度,和组件要显示的高度,这里定义为viewHight、viewWidth;
4、要知道显示数据的字体Font,这个是你自己设置的,我就不过多重复,你自己看着设置
5、需要一个方法,这个方法是可以计算文本内容的宽度的,下面直接摘抄出来
/**
* 获取文本单行宽度
*
* @param text
* @param font
* @return
*/
public static Integer getRollMsgWidth(String text, Font font) {
FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(font);
int width = SwingUtilities.computeStringWidth(fm, text);
return width;
}
6、下面就可以直接使用方法了,因为,只是一个方法,所以,我就尽可能的把内容里面的名称注释一下,方便大家理解,上代码:
/**
* 判断滚动数据行数
*
* @param rollMsg
* @param font
* @return
*/
public int checkRollMsgLine(String rollMsg, Font font) {
//单行宽度---这里就是你滚动组件的宽度,具体需要你自己算,既然要换行,肯定是上下滚动
int sigleLineWidth = viewWidth - msgLeftMargin - msgRightMargin;
//总共行数------这个变量就是计算结果的总共行数
int rollMsgCount = 0;
//对换行符进行切割-----如果文本里面有换行符,那就直接进行比对,当然,你也可以加上‘\r’
//这里我就值是检索了‘\n’
String[] msgArray = rollMsg.split("\n");
//将代码分块后进行循环遍历
for (int a = 0; a < msgArray.length; a++) {
int newLinecount = 1;
int length = msgArray[a].length();
int allMsgWidth = 0;
//计算每块的行数
for (int b = 0; b < length; b++) {
String substring = msgArray[a].substring(b, b + 1);
Integer widthString = getRollMsgWidth(substring, font);
allMsgWidth += widthString;
if (allMsgWidth >= sigleLineWidth) {
newLinecount++;
allMsgWidth = widthString;
}
}
rollMsgCount += newLinecount;
}
return rollMsgCount;
}
7、总体就是这么简单,不是什么厉害的东西,但是,也是自己写的,如果写的不好,希望路过的大神不要喷,可以指点一二,目的就是为了需要的朋友们直接拿去用,另外就是,自己以后需要的话,回过头来直接使用,整体也有一个完整的JavaSwing的滚动完整组件,可以上下和左右滚动,我是觉得大家不会需要,如果有人需要的话,可以联系我,我到时候,再补上一个博客也是可以的,嗯,就这些吧,记录到此。喜欢的话,请点个赞,支持一下哦,3q ~-~。