动态改变JDialog的宽度
我创建了一个包含 JLabel 的 JDialog。由于根据用户输入而变化的文本长度可能包含大量字符,因此需要根据JDialog的长度大小动态地改变JDialog的长度。我已经尝试过 pack() 方法,但事实并非如此。谁能给我一些建议吗?提前致谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
getPreferredSize
forJLabel
- 基本上你必须从JLabel
获取textLength
(以像素为单位),有 3 个正确的方式,但我喜欢:现在您可以正确地为
JLabel
设置setPreferredSize
(请默认是否需要添加 +5 - + 10 至返回SwingUtilities.computeStringWidth
的Integer
)pack();
在顶级容器(JDialog
)上。getPreferredSize
forJLabel
- basically you have to gettextLength
fromJLabel
in pixels, there are 3 correct ways, but I love:Now you are able to
setPreferredSize
forJLabel
correctly (please by defalut is there needed to add +5 - +10 to theInteger
that returnsSwingUtilities.computeStringWidth
)pack();
on the top level container (theJDialog
).尝试调用我刚刚意识到这行不通。JDialog
上的 >validate()。这是一个很好的 线程。我建议听听 @Andrew Thompson 提供的答案和建议,他实际上是这里的一位杰出用户。
Try invokingI just realized that this will not work.validate()
on theJDialog
.Here's a nice thread that discusses this issue. I would recommend listening to the answer and suggestions provided by @Andrew Thompson, who's actually a prominent user here.
另一种选择是将文本放入
JTextArea
中,然后将其放入JScrollPane
中。EG
代码
Another alternative is to put the text into a
JTextArea
and put that in aJScrollPane
.E.G.
Code
为什么
pack()
不适合你?您可以使用 setSize 并将宽度设为
JLabel
的宽度。每当用户更改输入时调用此方法。Why will
pack()
not work for you?You could use setSize and base the width off the width of the
JLabel
. Call this method whenever the user changes the input.尝试使用
validate()
方法,这将导致JDialog
再次布置其子组件编辑
这显然不起作用
Trying using the
validate()
method, this will cause theJDialog
to lay out its subcomponents againEDIT
This apparently will not work