获取/计算符号宽度问题:textfield宽高获取返回0异常
解决Swing组件getWidth/getHeight返回0的问题
哈哈,这个问题我太熟了!你刚把文本框添加到面板就立刻调用getWidth()和getHeight(),这时候组件还没走完Swing的布局与渲染流程呢——它还没被布局管理器分配实际的显示空间,也没有完成绘制,所以返回初始的0值完全是意料之中的事儿。
给你几个靠谱的解决办法:
监听组件尺寸变化事件
给文本框添加一个ComponentListener,当组件真正完成布局、尺寸发生变化时,再去获取实际的宽高。示例代码如下:textfield.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { // 这里拿到的就是组件实际显示后的尺寸 System.out.println("文本框宽度:" + textfield.getWidth()); System.out.println("文本框高度:" + textfield.getHeight()); } }); panel.add(textfield, BorderLayout.SOUTH);延迟到UI渲染完成后获取
把获取尺寸的逻辑放到SwingUtilities.invokeLater()中,让它在Swing事件队列的末尾执行,确保组件已经完成布局和渲染:panel.add(textfield, BorderLayout.SOUTH); SwingUtilities.invokeLater(() -> { System.out.println(textfield.getWidth()); System.out.println(textfield.getHeight()); });如果只是需要推荐尺寸(可选)
如果你不需要严格的实际显示尺寸,只是想知道组件的推荐大小,可以调用getPreferredSize(),不过这个值是布局管理器用来计算布局的参考值,不一定等于最终显示的实际尺寸:Dimension preferredSize = textfield.getPreferredSize(); System.out.println("推荐宽度:" + preferredSize.width); System.out.println("推荐高度:" + preferredSize.height);
内容的提问来源于stack exchange,提问作者Kristijan Kantoci
相关产品推荐
相关产品推荐

