JPANEL面板上画图,当鼠标点上这张图时如何获得焦点? JPANEL面板上画图,当鼠标点上这张图时如何获得焦点?对图加载可拖动事件? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在panel上绘图,鼠标事件可以注册在panel组件上,做图像拖动操作时,是由panel响应鼠标事件,然后计算出拖动的偏移量,根据这个偏移量重新绘图以达到图像被拖动的效果。 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) { }}上面就是我写的面板类 简单的方法你可以根据图像的长宽、在panel中绘制的位置和鼠标落下的位置计算出落在那张图上,你如果想实现类似“图像列表”功能,可以使用cellrenderer机制来绘制每个图像单元,参考JList的源代码。 你可以把图片画在JLabel上,然后再添加到Jpanel上一个图片对应一个JLabel,每个JLabel上注册事件.JLabel响应拖动事件 java中鼠标事件 有关JAVA类的封装等级的 关于一个算法 java 记事本 java字符串拆分 一个将树形结构(JTree)转换成xml文档的问题 怎样用JAVA编程获取ORACLE存储过程的返回值,返回值是结果集,不是单个的值。 关于applet:classnotfound java se java编的GUI界面,会出现out of Memory错误。。。怎么解决? Java邮件附件发送的问题 高手请过来看下,这是怎么回事?急!!!
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) {
}
}
上面就是我写的面板类
一个图片对应一个JLabel,每个JLabel上注册事件.
JLabel响应拖动事件