Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jpanel上显示从Jfilechooser选择的图像_Java_Swing_Netbeans - Fatal编程技术网

Java 在Jpanel上显示从Jfilechooser选择的图像

Java 在Jpanel上显示从Jfilechooser选择的图像,java,swing,netbeans,Java,Swing,Netbeans,我正在尝试制作一个JPanel,它有一个按钮,你可以点击它上传一张图片。它会弹出一个对话框,其中包含一个JFilechooser,当您单击“打开”时,它会将文件路径名存储在ArrayList中。我希望选中的图像在选中后显示在JPanel上。我知道很多人以前问过这个问题,但我已经尝试了所有我能找到的解决方案,但我无法让图像出现。以下是我单击上载按钮时执行的操作的代码(AddImages是Jpanel): 当我尝试上载图像时,图像会存储在ArrayList中(通过在添加图像后添加打印ArrayLis

我正在尝试制作一个JPanel,它有一个按钮,你可以点击它上传一张图片。它会弹出一个对话框,其中包含一个JFilechooser,当您单击“打开”时,它会将文件路径名存储在ArrayList中。我希望选中的图像在选中后显示在JPanel上。我知道很多人以前问过这个问题,但我已经尝试了所有我能找到的解决方案,但我无法让图像出现。以下是我单击上载按钮时执行的操作的代码(AddImages是Jpanel):

当我尝试上载图像时,图像会存储在ArrayList中(通过在添加图像后添加打印ArrayList大小的行进行测试),但它不会显示在JPanel上。有人知道我做错了什么吗?提前谢谢

编辑:下面是面板的完整代码(可见)。为pic1和pic2执行的操作是相同的代码,我已在上面显示:

addImagePrompt.setText(“添加一些图片”)


将组件添加到容器后,必须调用
revalidate()
,以便其布局管理器(重新)计算子组件的位置并重新绘制它们:

JLabel label = new JLabel(icon, JLabel.CENTER);
AddImages.add(label);
AddImages.revalidate();

如果使用相同的“AddImages”面板上载多个图像,您将看到它们都作为单独的组件添加到面板中。如果这不是您所期望的,那么您需要重新思考如何实现这一点。

这里唯一缺少的是一个合适的布局管理器。 你可以在这里阅读:

因此,添加这样的内容(例如)应该有助于实现您的愿望:

AddImages.setLayout(new BoxLayout(AddImages, BoxLayout.Y_AXIS));
AddImages.add(label);
AddImages.revalidate();
this.pack();

谢谢我试过了,但还是不行。我还尝试了AddImages.revalidate();AddImages.repaint();但是没有发生任何事情我们需要看到更多的代码-屏幕上是否可以看到“AddImages”面板?你能做一个复制你的问题吗?我刚刚更新了我的原始帖子,加入了我的代码,代码不是最小的,我也不能运行它来复制问题。但无论如何,您的面板似乎使用了复杂的
GroupLayout
配置。您创建的新标签应该放置在布局中的什么位置?它可能被放置在框架中可见的区域之外吗?@bld,是的,问题在于GroupLayout。它希望您在将零部件添加到配电盘时使用各种约束来控制零部件的位置。您不能在没有约束的情况下使用add(…)方法并期望它工作。不要使用IDE生成代码。然后,您可以完全控制布局管理器,并且可以更轻松地创建动态GUI。另外,请注意,变量名不应以大写字符开头。
JLabel label = new JLabel(icon, JLabel.CENTER);
AddImages.add(label);
AddImages.revalidate();
AddImages.setLayout(new BoxLayout(AddImages, BoxLayout.Y_AXIS));
AddImages.add(label);
AddImages.revalidate();
this.pack();