这是我的代码:
/**
* 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())。如果我加载一个较小的图像,我希望我的框架调整大小,以满足这些较小的图像的高度和宽度,而不是基于旧的图像。
虽然有Java类来表示窗口,但窗口是一种系统资源,Java在很大程度上不控制它。(当然,所有框架和JFrame都是窗口。)
当您调用<code>pack()</code>时,系统会响应调整窗口大小的请求,但可能不会立即生效。因此,在调用pack()
完成时,窗口的大小不一定会改变。
这在Window类的文档中有描述:
…顶层窗口(包括< code >窗口 、< code >框架和< code >对话框)的位置和大小由桌面的窗口管理系统控制。对< code>setLocation 、< code>setSize和< code>setBounds的调用是转发给窗口管理系统的请求(不是指令)。我们将尽一切努力满足这些要求。然而,在某些情况下,窗口管理系统可能会忽略此类请求,或者修改所请求的几何图形,以便以更紧密匹配桌面设置的方式来放置和调整< code >窗口的大小。
由于本机事件处理的异步特性,在处理完最后一个请求之前,< code>getBounds 、< code>getLocation 、< code > getlocationscreen 和< code>getSize返回的结果可能不会反映屏幕上窗口的实际几何形状。在后续请求的处理过程中,当窗口管理系统满足请求时,这些值可能会相应地改变。
通常,这可以通过以下方式来解决:
this.pack();
EventQueue.invokeLater(() -> {
this.setMinimumSize(this.getSize());
enableButtons();
});
也许可以试试这样的东西:
this.setMinimumSize(null);
this.pack();
this.setMinimumSize(this.getSize());
所以pack()方法不限于之前的最小值?如果null不起作用,则使用(0,0)维度。
问题内容: 我正在制作一个具有以下布局()的Java Swing应用程序: 当用户添加或删除图标时,其他图标应缩小或增长。 我的问题很简单:我有一个包含;如何调整此图标的大小? 问题答案: 调整图标大小并不容易。您需要使用Java的2D图形来缩放图像。第一个参数是Image类,您可以从类中轻松获取。您可以使用class加载图像文件,然后只需调用getter方法即可获取图像。
本文向大家介绍如果我们尝试从未打开的CURSOR中获取,将会得到什么结果?如果我们尝试打开一个已经打开的游标,结果将是什么?,包括了如果我们尝试从未打开的CURSOR中获取,将会得到什么结果?如果我们尝试打开一个已经打开的游标,结果将是什么?的使用技巧和注意事项,需要的朋友参考一下 当我们尝试从未打开的CURSOR中获取数据时,查询将失败。在这种情况下,SQLCA的SQLCODE字段将填充DB2错
问题内容: 我想使用JLabel(Icon)来显示来自我网站(http://xxx.xxx.xxx.xxx/java_pic/test.jpg)的图像。我有一个刷新按钮来新建一个新的JLabel和ImageIcon(以获取最新的图像)该程序成功运行…但是当我上载新图像以覆盖旧图像时(http://xxx.xxx。 xxx.xxx/java_pic/test.jpg ),我按了刷新按钮…什么都没发生
问题内容: 如果我有 然后,如果我创建 并执行 自行车的速度也会改变吗?如果没有,那有什么办法吗? 问题答案: 是的,它将改变。Java Assignment操作仅创建对该对象的新 引用 。换句话说写类似 会 不会 复制对象中的所有值。objectA和objectB都指向该类的相同 实例 。 如果要复制对象的所有值,则应查看克隆
问题内容: 我正在尝试在上显示图像。我正在使用渲染图像,并且图像与类文件位于同一目录中。但是,没有显示图像,并且没有发生错误。谁能帮忙弄清楚我的代码有什么问题… 问题答案: 你应该用