Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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 如何在JFrame中显示BuffereImage?_Java_Swing_Jframe_Bufferedimage - Fatal编程技术网

Java 如何在JFrame中显示BuffereImage?

Java 如何在JFrame中显示BuffereImage?,java,swing,jframe,bufferedimage,Java,Swing,Jframe,Bufferedimage,我想在同一个JFrame中显示同一图像的变体,例如,在JFrame中显示一个图像,然后用同一图像的灰度替换它。每当更新图像时,您必须重新绘制JFrame 下面是一个简单的google在这个主题上的介绍:(我所有的Java编码都使用这些教程) 我不确定您的问题是什么,但如果您有一个BuffereImage,那么您只需使用该图像创建一个ImageIcon,然后将该图标添加到JLabel,并像其他任何组件一样将标签添加到GUI 如果您的问题是关于如何创建灰度,我建议您使用这些术语作为搜索关键字搜索we

我想在同一个JFrame中显示同一图像的变体,例如,在JFrame中显示一个图像,然后用同一图像的灰度替换它。

每当更新图像时,您必须重新绘制
JFrame

下面是一个简单的google在这个主题上的介绍:(我所有的Java编码都使用这些教程)


我不确定您的问题是什么,但如果您有一个BuffereImage,那么您只需使用该图像创建一个ImageIcon,然后将该图标添加到JLabel,并像其他任何组件一样将标签添加到GUI


如果您的问题是关于如何创建灰度,我建议您使用这些术语作为搜索关键字搜索web,我相信您会在那里找到示例。

要基于camickr的解决方案(针对像我这样希望快速复制/粘贴代码的懒人),请看下面的代码示例:

JFrame frame = new JFrame();
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(new JLabel(new ImageIcon(img)));
frame.getContentPane().add(new JLabel(new ImageIcon(img2)));
frame.getContentPane().add(new JLabel(new ImageIcon(img3)));
frame.pack();
frame.setVisible(true);
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // if you want the X button to close the app

只是以防万一,生命太短了,看看官方文件,这是一个肮脏的方法,可以让它重复多次

private static JFrame frame;
private static JLabel label;
public static void display(BufferedImage image){
   if(frame==null){
       frame=new JFrame();
       frame.setTitle("stained_image");
       frame.setSize(image.getWidth(), image.getHeight());
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
       label=new JLabel();
       label.setIcon(new ImageIcon(image));
       frame.getContentPane().add(label,BorderLayout.CENTER);
       frame.setLocationRelativeTo(null);
       frame.pack();
       frame.setVisible(true);
   }else label.setIcon(new ImageIcon(image));
}

这使得最小的窗口成为可能。我已经很久没有使用swing了,但我猜你没有调用
pack()
如果你有一个小窗口,这正是我想要的,请快速检查BuffereImage是否正确读取。。不需要所有这些JComponent扩展和打印覆盖。谢谢@您还需要调用
frame.setPreferredSize(新java.awt.Dimension(int-width,int-height))frame.pack()之前的code>导入java.awt.Dimension也可以:)这应该是选择的答案+1作为代码示例。