我创建了一个扩展 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]
}
}
当我运行这段代码时,它返回“WIDTH: java.awt.Dimension[width=0,height=0]”,就像我在评论中放置的那样。
有什么方法可以在构造函数中获取 JLabel 的宽度?还有什么方法可以让 JLabel 自动换行?
最佳答案
任何 Swing 组件的大小在被渲染之前都将为零,没有办法解决这个问题。您可以使用 FontMetrics class 来估计文本的大小(查看 API 链接)。
还有一些技巧可以让您使用 HTML 在 JLabel 中自动换行
编辑 1
关于您的问题:
What would you suggest being the best way to estimate it? Something like counting the characters and the multiplying by an average character width?
我不知道,因为我没有使用过 FontMetrics。我建议您尝试一下,看看您能想出什么,并在此论坛上搜索它在答案中的用途。
关于我的第二个解决方案,请在此处检查我对问题的回答:word-wrap-in-jlist-items
关于java - JLabel 宽度在构造函数中始终返回 0。那么如果宽度超过X值,插入一个换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8331727/