我已经创建了JPanel,并且已经在其中添加了组件,我将把JPanel传递给PopUpFactory ......所以我可以在传递之前获得JPanel的大小吗?
我将Jlabel放入其中并在此之后发短信,我不知道该文本的大小......
答案 0 :(得分:3)
您可以使用setPreferredSize(Dimension)
设置首选尺寸; e.g。
JPanel pnl = new JPanel(new BorderLayout());
pnl.setPreferredSize(new Dimension(640, 480));
随后可以通过调用getPreferredSize()
来获取此值,并在布局组件时使用该值,但请注意,不能保证它实际上将以此大小呈现。
为什么在渲染之前实际需要大小?通常使用Swing编程,您不需要处理显式尺寸/尺寸,因为所选布局将为您处理这些细节。
修改强>
要解决OP关于JTextField
的查询,这里有一个选项可以调用接受预期列数的基于int
的构造函数。这会使文本字段呈现得足够宽,以支持该数量的字符。
我的第二点阐述了永远不应该直接调用setXXXSize方法并且开发人员应该完全依赖LayoutManager
的注释。这并不总是合适的 - 通常需要设置主应用程序框架的首选大小。例如,假设我在Swing中编写了一个简单的浏览器应用程序。主框架的大部分是用于呈现HTML的JEditorPane
。如果我没有为此组件(或包含框架)设置首选大小,并且我调用pack()
,则框架可能会尽可能小,而不是使用合理的尺寸。
答案 1 :(得分:2)
JComponents
,则{p> getSize
不会返回getLocation
,getBounds
,getXxxSize
或JComponents
屏幕或通话后pack()
但是为什么要关心这一点,因为(正确和正确的)LayoutManager的使用可以自动执行此操作,这就是LayoutManager
存在的原因,为什么要关心
答案 2 :(得分:0)
只需为JLabel调用getPreferredSize方法。如果没有实现它的容器,如果你在设置jlabel文本之前设置文本,首选大小会改变。