在paintComponent之前获取组件尺寸?

时间:2015-05-30 13:48:37

标签: java swing

我正在绘制我自己的扩展JPanel的组件:

protected void paintComponent(Graphics g) {

这很好用。

我需要做一些准备组件的工作。这项工作取决于组件的尺寸。

组件的尺寸似乎仅在paintComponent()功能中可用。所以我现在这样做:

if(firstTime){
//do init
firstTime=false
}
//draw

在我的paintComponent()函数中。我不喜欢这个解决方案。

有没有办法在调用paintComponent()函数之前获取尺寸? (它似乎在构造函数中无效)

2 个答案:

答案 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
    }
});