我的JFrame
里面有一个JPanel
。面板显示在运行时从网络接收的图像。这些图像通常很大,但可以有任何尺寸。考虑到这一点,鉴于我将来可能会在框架中添加一个菜单栏,我想做以下事情:
有办法做到这一点吗?如果没有,最好的替代方案是什么?
提前致谢
编辑:
总而言之,问题是如何调整父框架的大小以调整其子内容面板。这与大多数人的做法相反(调整面板以适应框架)。
对于第3点,我已经有了内容面板尺寸,因此问题减少到计算框架框架的大小(顶部标题栏高度,边框宽度)。有了这个,我可以将框架调整到一个大小,例如内容窗格完全适合内部。
答案 0 :(得分:2)
将图像作为图标放到JLabel而不是将图像绘制到JPanel
您可以通过使用
在图形用户界面中进行双击之前缩小图像像素大小
Image#getScaledInstance(int width, int height, int hints)
请注意,必须在finally块中核心InputStream
,否则这些Objects
将保留在内存中,直到OutOfMemoryError锁定当前JVM实例
编辑
put images as Icon to the JLabel
但
pictures = new ImageIcon("Xxxxx");
pictures.getImage().flush();
myLabel.setIcon(pictures);
此代码最好从SwingWorker
或Runnable#Thread
拨打,但在这种情况下,您必须将代码行myLabel.setIcon(pictures);
包装到invokeLater()
中,
更多关于Swing Concurency教程中的SwingWorker
和invokeLater()
,关于此论坛上的可靠性的一堆答案