我正在绘制我自己的扩展JPanel的组件:
protected void paintComponent(Graphics g) {
这很好用。
我需要做一些准备组件的工作。这项工作取决于组件的尺寸。
组件的尺寸似乎仅在paintComponent()
功能中可用。所以我现在这样做:
if(firstTime){
//do init
firstTime=false
}
//draw
在我的paintComponent()
函数中。我不喜欢这个解决方案。
有没有办法在调用paintComponent()
函数之前获取尺寸?
(它似乎在构造函数中无效)
答案 0 :(得分:1)
可以选择绘制到BufferedImage
。显然(或者至少,我希望很明显)我们在创建图像时给图像一个大小。
我们得到Graphics2D
这样的对象:
Graphics2D g = bi.creatGraphics();
图像可以显示在JLabel
:
JLabel label == new JLabel(new ImageIcon(bi)); // now add the label to something..
在新的绘画调用后刷新标签:
label.repaint();
但是像@HovercraftFullOfEels一样,我怀疑这是最好的方法。
答案 1 :(得分:0)
似乎这样的代码可以正常运行:
JPanel panel = new JPanel();
panel.addHierarchyListener((event) -> {
if((event.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0) {
// before paintComponent
}
});