【发布时间】:2013-11-11 13:24:32
【问题描述】:
我想通过setPreferredSize() 将JLabel 的大小设置为特定(最小)大小。
如果JLabel 中的文本不再适合,JLabel 应该会增长。
现在的问题是:
- 在
label.setPreferredSize(new Dimension(50,20));之后 - 我会
setText("new long text");,但大小不会改变
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class LabelTest
{
public static void createWindow()
{
JFrame frame = new JFrame();
JLabel label = new JLabel("Text");
System.out.println(label.getPreferredSize().width); // 25
label.setText("New long text");
System.out.println(label.getPreferredSize().width); // 77 - JLabel grows as expected
label.setText("Text");
System.out.println(label.getPreferredSize().width); // 25
label.setPreferredSize(new Dimension(50, 20));
System.out.println(label.getPreferredSize().width); // 50 - JLabel grows to given size as expected
label.setText("New long text");
System.out.println(label.getPreferredSize().width); // 50 - it should be 77 again
frame.add(label);
frame.setPreferredSize(new Dimension(200, 100));
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createWindow();
}
});
}
}
所以我需要一个解决方案来在我手动设置首选尺寸后设置文本时获得新的首选尺寸。
如果您需要更多信息,请询问。
提前致谢!
【问题讨论】:
-
所以实际上,您希望能够覆盖 getMinimumSize()... 嗯。
-
一旦你调用 setPreferredSize() 标签的大小将永远不会再动态改变。您需要使用 setPreferredSize(null)。更好的选择是使用尊重最小/首选尺寸的布局管理器,例如 BoxLayout 或 GrigBagLayout。
-
感谢@camickr 的回答! setPreferedSize(null) 正是我所需要的,尽管我知道 LayoutManager 会更好!