Java 如果我已经有一个带有ImageIcon的JLabel,如果我更改ImageIcon然后打包框架,它不会';t包装
这是我的密码:Java 如果我已经有一个带有ImageIcon的JLabel,如果我更改ImageIcon然后打包框架,它不会';t包装,java,Java,这是我的密码: /** * Opens file and gives a warning if non image. */ private void openFile() { final int returnVal = myFileChooser.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { myFile = myFileChooser.getSelectedFile
/**
* Opens file and gives a warning if non image.
*/
private void openFile() {
final int returnVal = myFileChooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
myFile = myFileChooser.getSelectedFile();
try {
myImage = PixelImage.load(myFile);
myImageIcon = new ImageIcon(myImage);
myImageLabel.setIcon(myImageIcon);
this.pack();
this.setMinimumSize(this.getSize());
enableButtons();
} catch (final IOException exception) {
JOptionPane.showMessageDialog(null,
"The selected file did not contain an image!");
}
} else {
System.out.println("ERROR FILE"); //PLACEHOLDER
}
}
所以我想做的是:
我遇到的问题是,当我在现有图像上加载一个新图像时,它会删除旧图像(如预期的),然后当它在新图像(例如较小的图像)周围打包帧时,它会根据旧图像保持帧的最小大小要求,而不是设置最小大小(this.setMinimumSize(this.getSize()))。如果加载较小的图像,我希望调整帧大小以满足较小图像的高度和宽度,而不是基于旧图像。可以尝试以下操作:
this.setMinimumSize(null);
this.pack();
this.setMinimumSize(this.getSize());
那么pack()方法不限于前面的最小值?如果null不起作用,则使用(0,0)维度。可以尝试以下操作:
this.setMinimumSize(null);
this.pack();
this.setMinimumSize(this.getSize());
那么pack()方法不限于前面的最小值?如果null不起作用,则使用(0,0)维度。尽管有Java类来表示窗口,但窗口是一种系统资源,Java基本上不控制它。(当然,所有框架和JFrame都是窗口。) 调用
pack()
时,系统会响应调整窗口大小的请求,但该请求可能不会立即生效。因此,在调用pack()
完成时,窗口的大小不一定会改变
以下章节对此进行了描述:
…顶级窗口(包括窗口
s、框架
s和对话框
s)的位置和大小由桌面窗口管理系统控制。对setLocation
、setSize
和setBounds
的调用是转发到窗口管理系统的请求(不是指令)。我们将尽一切努力满足这些要求。但是,在某些情况下,窗口管理系统可能会忽略此类请求,或修改请求的几何图形,以便以更接近桌面设置的方式放置和调整窗口的大小
由于本机事件处理的异步性质,在处理最后一个请求之前,getBounds
、getLocation
、getLocationOnScreen
和getSize
返回的结果可能不会反映屏幕上窗口的实际几何结构。在处理后续请求的过程中,当窗口管理系统完成请求时,这些值可能会相应地更改
通常,这可以通过使用:
虽然有Java类来表示窗口,但窗口是一种系统资源,Java基本上不控制它。(当然,所有框架和JFrame都是窗口。)
调用pack()
时,系统会响应调整窗口大小的请求,但该请求可能不会立即生效。因此,在调用pack()
完成时,窗口的大小不一定会改变
以下章节对此进行了描述:
…顶级窗口(包括窗口
s、框架
s和对话框
s)的位置和大小由桌面窗口管理系统控制。对setLocation
、setSize
和setBounds
的调用是转发到窗口管理系统的请求(不是指令)。我们将尽一切努力满足这些要求。但是,在某些情况下,窗口管理系统可能会忽略此类请求,或修改请求的几何图形,以便以更接近桌面设置的方式放置和调整窗口的大小
由于本机事件处理的异步性质,在处理最后一个请求之前,getBounds
、getLocation
、getLocationOnScreen
和getSize
返回的结果可能不会反映屏幕上窗口的实际几何结构。在处理后续请求的过程中,当窗口管理系统完成请求时,这些值可能会相应地更改
通常,这可以通过使用:
当你加载一个更大的图像时,pack工作吗?当你加载一个更大的图像时,pack工作吗?谢谢。我不知道pack()考虑了最小值。谢谢。我不知道pack()考虑了最小值。