【发布时间】:2014-08-24 21:38:36
【问题描述】:
当我尝试获取 JPanel 的边界时,它总是返回 (
我在JPanel类的构造函数中使用this.getBounds()):
java.awt.Rectangle[x=0,y=0,width=0,height=0]
在 Swing 组件的渲染中,这实际上是在什么时候设置的?确定边界大小后是否会发生组件事件?
【问题讨论】:
标签: java swing jpanel jcomponent bounds
当我尝试获取 JPanel 的边界时,它总是返回 (
我在JPanel类的构造函数中使用this.getBounds()):
java.awt.Rectangle[x=0,y=0,width=0,height=0]
在 Swing 组件的渲染中,这实际上是在什么时候设置的?确定边界大小后是否会发生组件事件?
【问题讨论】:
标签: java swing jpanel jcomponent bounds
在 GUI 的构造函数中,组件还没有被渲染,所以它们的边界是 [0, 0]。只有在 顶级窗口(例如包含 JFrame)上调用 pack() 或 setVisible(true) 后,组件才会呈现。但是你的问题引出了一个问题,为什么你需要这些信息?您打算如何处理这些数据?还有其他可以获取信息并且有用的位置,例如 JComponent 的paintComponent 方法或在 ComponentListener 中。
【讨论】:
好的,感谢您的回复,但我想通了。基本上我需要从 JComponent 重写 paint() 方法。此时矩形边界已正确生成。真的一点都不复杂。
更新:
基于http://www.oracle.com/technetwork/java/painting-140037.html,它建议使用paintComponent() 而不是paint(),即使API 确实允许这样做。这专门处理组件本身,而不是边框等所有相关元素。
【讨论】: