1 java swing jlabel fontmetrics
我创建了一个扩展JLabel类的类.这个类基本上使我"更好"地将相关的IconImage附加到我的JLabel,并且也正确地调整它的大小.
当我通过代码创建一个新的JLabel时,我现在就做了.something = new MyClass("message", 1);
对于上面的代码我已经有了MyClass(String msg, int type) {}构造函数.在这个构造函数中,我希望能够获得用户指定的文本的宽度.如果该宽度超过某个值,300px那么我想说我想插入一个换行符(基本上是根据最大宽度进行JLabel自动换行).
我删除了下面代码中的部分,它将图像添加到JLabel,因为这与问题无关 - 我已经创建了一个单独的类来处理它,这已经有效了.
package org.me.myimageapp;
import javax.swing.JLabel;
/**
*
* @author Jordan
*/
public class chatBubble extends JLabel {
public static final int BUBBLE_TO_USER = 1;
public static final int BUBBLE_FROM_USER = 2;
chatBubble(String message, int bubble_type) {
if ( (bubble_type!=1) && (bubble_type!=2) ) {
return;
}
this.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
this.setText(message);
this.setVisible(true);
System.out.println("WIDTH: "+this.getSize().toString()); //WIDTH: java.awt.Dimension[width=0,height=0]
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,它返回"WIDTH:java.awt.Dimension [width = 0,height = 0]",就像我放在评论中一样.
有什么办法可以在构造函数中获得JLabel的宽度吗?还有什么方法可以让JLabel允许我自动换行吗?
任何Swing组件的大小都将为零,直到它被渲染,没有办法解决.您可以通过使用FontMetrics类来估计文本的大小(查看API的链接).
还有一些kludges可以通过使用HTML在JLabel中获得自动换行
编辑1
关于您的问题:
您认为最好的估算方法是什么?像计算字符和乘以平均字符宽度的东西?
我不知道因为我没有使用FontMetrics.我建议玩一些,看看你能想出什么,并在这个论坛上搜索它的答案.
关于我的第二个解决方案,请在这里查看我对问题的回答:word-wrap-in-jlist-items
| 归档时间: |
|
| 查看次数: |
1246 次 |
| 最近记录: |