于是按照贴吧某同学的指教,把imageViewer里那个愚蠢的语句改了

  于是开心地升级到了V1.1版本

  等我先消化下知识再来更新。

  关键在于面板的setPreferredSize(Dimension d)方法和框架的pack()方法。

========================================================================================

  大概就是说,用了布局管理器的话,管理器会根据preferredSize来安排控件大小,用setSize的话不一定会起作用,所以我之前直接改变面板的大小然后pack框架,最后出来的效果是框架高度变成0,大概就是因为preferredSize默认是0。………………对么?

  总之,用setPreferredSize才是正确的设定面板大小的方法。

  至于pack,就是根据框架内容来重新计算框架大小,似乎是很智能,所以不用想太多。

 

  按照我以前的做法,结果就是打开了文件之后按照图片大小改变框架大小,然后面板就因为布局管理器而自动扩大,但是图大框架大,它框架还包含边框啊,于是能用来显示的地方就小,于是图就挤到窗口外面了。

  现在呢,打开了文件之后我按照图片大小设置面板大小,这样面板就挤出去了,然后再调用框架的pack方法,自动按照内容物大小来扩大框架,就不用担心边框的问题了,于是就搞定了。

 

  不过还有一个问题搞不懂。

public void actionPerformed(ActionEvent e) {
    Image img;
    if ((img = getImage()) != null) {
        parent.getPanel().setImage(img);
        parent.getPanel().setPreferredSize(new Dimension(img.getWidth(parent), img.getHeight(parent)));
        parent.pack();
    } else {
        return;
    }
}

  我之前在setImage之后还加了一句repaint(),然后发现注释掉也不影响显示,就删掉了。

  于是现在我只是用setImage方法改变了面板的属性,就是一个图片对象的引用,那它到底是什么时候重新绘制内容的?

  请自行脑内配上少年包青天的那个悬疑BGM。

  我找来了,不谢。

你可能感兴趣的:(imageview)