JPANEL面板上画图,当鼠标点上这张图时如何获得焦点?
对图加载可拖动事件?

解决方案 »

  1.   

    在panel上绘图,鼠标事件可以注册在panel组件上,做图像拖动操作时,是由panel响应鼠标事件,然后计算出拖动的偏移量,根据这个偏移量重新绘图以达到图像被拖动的效果。
      

  2.   

    public class MapPanel extends JPanel implements MouseListener,MouseMotionListener{ private static final long serialVersionUID = 1L;

    private ImageIcon backimg = null;

    private ImageIcon node = null;

    public MapPanel(String imageName) {
    this.addMouseListener(this);
    backimg = new ImageIcon("D://wf.jpg");
    node = new ImageIcon(imageName);
    }

    public void paint(Graphics g){
    super.paint(g);
    backimg.paintIcon(this, g, 0, 0);
    node.paintIcon(this, g, 50, 50);
    }

    public void update(Graphics g){
    super.update(g);
    node.paintIcon(this, g, 50, 50);
    } public void mouseClicked(MouseEvent e) {
    } public void mouseEntered(MouseEvent e) {

    } public void mouseExited(MouseEvent e) {

    } public void mousePressed(MouseEvent e) {
    addMouseMotionListener(this);
    Graphics g = this.getGraphics();
    node.paintIcon(this, g, e.getX()-30, e.getY()-30);
    System.out.println("mousePressed");
    } public void mouseReleased(MouseEvent e) {
    removeMouseMotionListener(this);
    Graphics g = this.getGraphics();
    node.paintIcon(this, g, e.getX()-30, e.getY()-30);
    } public void mouseDragged(MouseEvent e) {
    Graphics g = this.getGraphics();
    node.paintIcon(this, g, e.getX()-30, e.getY()-30);
    this.repaint();

    } public void mouseMoved(MouseEvent e) {

    }
    }
    上面就是我写的面板类
      

  3.   

    简单的方法你可以根据图像的长宽、在panel中绘制的位置和鼠标落下的位置计算出落在那张图上,你如果想实现类似“图像列表”功能,可以使用cellrenderer机制来绘制每个图像单元,参考JList的源代码。
      

  4.   

    你可以把图片画在JLabel上,然后再添加到Jpanel上
    一个图片对应一个JLabel,每个JLabel上注册事件.
    JLabel响应拖动事件