当前位置: 首页 > 知识库问答 >
问题:

如何将外部图像放入Java应用程序

蒋向笛
2023-03-14

我希望将一个图像从我的桌面拖放到我的JPanel/Jframe上,然后能够将该图像存储到一个BufferedImage对象中,并对其执行id喜欢的操作

有没有办法用MouseListener做到这一点?

这是一个虚构的完美世界的例子,我可以在其中做到这一点

    Jframe jframe = new Jframe();
    //set up jframe bla bla bla
    
    MouseListener ml = new MouseListener(){
       mouseRealeased(MouseEvent e){
            //get droped thing from e
            if(check if dropped thing is an image){
                this.myImageField = (BufferedImage)droppedThing;
            }
       }
    }        
    jframe.addMouseListener(ml); 

我希望你能明白。不是在寻找超复杂的东西。我是个笨蛋,尽量简单谢谢:)

共有1个答案

蒋默
2023-03-14
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.UIManager;

public class FileDrag {

    public static void main(String[] args) {
        new FileDrag();
    }

    public class FilePane extends JLayeredPane {

        public FilePane() {
            File[] images = new File("C:\\hold\\thumbnails").listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    String name = pathname.getName().toLowerCase();
                    return name.endsWith(".png") || 
                                    name.endsWith(".jpg") || 
                                    name.endsWith(".bmp") ||
                                    name.endsWith(".gif");
                }
            });

            int x = 0;
            int y = 0;
            for (File imgFile : images) {

                try {
                    BufferedImage img = ImageIO.read(imgFile);
                    JLabel label = new JLabel(new ImageIcon(img));
                    label.setSize(label.getPreferredSize());
                    label.setLocation(x, y);
                    MouseHandler mh  = new MouseHandler();
                    label.addMouseListener(mh);
                    label.addMouseMotionListener(mh);
                    add(label);
                    x += 20;
                    y += 20;
                } catch (IOException exp) {
                    exp.printStackTrace();
                }
            }
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(800, 800);
        }

        public class MouseHandler extends MouseAdapter {

            private Point offset;

            @Override
            public void mousePressed(MouseEvent e) {
                JLabel label = (JLabel) e.getComponent();
                moveToFront(label);
                offset = e.getPoint();
            }

            @Override
            public void mouseDragged(MouseEvent e) {
                int x = e.getPoint().x - offset.x;
                int y = e.getPoint().y - offset.y;
                Component component = e.getComponent();
                Point location = component.getLocation();
                location.x += x;
                location.y += y;
                component.setLocation(location);
            }
        }
    }
}

您还可以参考如何在Java GUI中使用鼠标光标拖动图像?

 类似资料:
  • 我创建了一个可以将图像导入标签的Swing应用程序,但我想做的是将导入的图像放入一个内部框架中,该框架将在图像删除后创建。 将图像放入Java应用程序 创建一个内部框架 使图像出现在内部框架中,而不是标签出现在JFrame中

  • 问题内容: 我有一个小控制面板,只是我做的一个小应用程序。我想最小化/使用系统图标上下控制面板,以及电池寿命,日期,网络等。 有人可以给我一个提示,链接到教程或阅读的东西吗? 问题答案: 从Java 6开始,and 类支持此功能。在Javadocs中有一个非常广泛的示例: 您也可以查看本文或此技术提示。

  • 问题内容: 我在Java项目中添加了一些外部库(在netbeans中)。 是否可以将外部jar库放入Java存档(而不是将其放入单独的(例如)“ lib”目录)? 问题答案: 当然可以。可以使用包含所有依赖项的“捆绑罐”下载一些开源项目。 您需要提取所有jar,然后将其再次打包到一个文件中。在此处 可以看到使用Ant进行此操作的示例。

  • 问题内容: 我对将外部应用程序嵌入基于QT 5.5 Widget的应用程序感兴趣。我只关心它在Linux上的工作。我在GNOME上使用CentOS 7。 这是我尝试过的代码: 在此示例中,我将分别获取WinId,并仅对值进行硬编码以进行测试。要嵌入的应用程序正在运行。 当我执行我的应用程序时,它运行没有错误。并且要嵌入的应用程序会更改屏幕位置并调整其大小,但是不会嵌入到我的应用程序中。它仍然是一个

  • 我们正在通过插件在EA中自动创建需求元素。但问题是我们无法将图像从目录导入到图像管理器,并将超链接添加到Requirement元素Notes。那么Enterprise architect是否提供了API来将映像从目录导入到映像管理器,并将超链接添加到Requirement元素注释中。