【发布时间】:2015-11-22 20:49:59
【问题描述】:
有一个面板。我在该面板上添加了 JLabel,并想知道该 JLabel 的大小。
下面是简单的代码:
import java.awt.Dimension;
import java.awt.Label;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
class MyPanel extends JPanel {
MyPanel() {
this.setPreferredSize(new Dimension(300, 300));
Label myLabel = new Label("ddddddddd");
this.add(myLabel);
System.out.println(myLabel.getPreferredSize().width);
System.out.println(myLabel.getSize().width);
System.out.println(myLabel.getMinimumSize().width);
System.out.println(myLabel.getMaximumSize().width);
}
}
class MyFrame extends JFrame {
MyFrame() {
this.setTitle("Test");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(new MyPanel());
this.pack();
this.setVisible(true);
}
}
public class Text {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MyFrame();
}
});
}
}
结果不是我预期的:
0.0
0.0
0.0
32767.0
在其他一些程序中,我使用“getPreferredSize().width”并收到正确的结果,但不幸的是我现在手头没有工作代码。
有人可以解释为什么用“getPreferredSize().width”我收到零,我怎样才能得到当前标签的宽度?
【问题讨论】:
-
1) 不要在没有正当理由的情况下将 Swing 和 AWT 组件混合在一起。在这种情况下,请改用
JLabel。 2)该代码在“在屏幕上实现”之前检查标签的大小,并且在包装框架之前。在查询大小之前做这两件事。 3) “如何获取当前标签的宽度(?)” 你为什么要那个测量值?在开发 Swing GUI 的十多年中,我需要准确查询标签的大小(仔细计算)0 次。