等我先消化下知识再来更新。
关键在于面板的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。