求教!!完成不了要下岗了!谁用java做过图形漫游功能?? 不过我以前在学习GUI那块知识的时候,我好象看到书中有过这样的例子,就是关于鼠标拖拽的!具体忘了!嘿嘿!不过这样的例子网上应该很多!还有关于手机开发的书当中肯定也有介绍的!多去找找资料吧!楼住好运! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MouseListener,MouseMotionListenermouseEnteredmouseExitedmouseMovedmouseDraggedmousePressedmouseReleased以前做过控件的拖动,例如把一个JPanel在界面里到处拖,基本思路如下:mouseEntered//这里面切换光标,换成一个张开的手mouseExited//切换光标,换成正常鼠标mousePressed//切换光标,换成抓的样子mouseReleased//切换光标,换成一个张开的手mouseDragged//拖动控件,刷新。这里有个问题,因为拖动的问题,所以界面有闪烁,虽然swing默认了二级缓存BufferedImage,不过还是有点不好看,当然跟我拖的是个控件可能也有关系,内容比较多,后来这块功能放弃了,就没仔细研究来优化。楼主看看对你有帮助吗? 觉得Image的拖动应该差不多,实在不行就把Image先放进个容器里然后拖那个容器好了,呵呵 这个我也没写过,不过我讲一下,我的建议. windows里面有光标的定义,HAND_CURSOR就表示一只手的形状.在JAVA中可以用下面的方法设定:setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));另外要实现所有的图形都移动,应该通过改变坐标轴的坐标可以达到吧 一个简单的例子import java.awt.*;import java.awt.event.MouseEvent;import javax.swing.*;import javax.swing.event.MouseInputAdapter;public class DragablePanel extends JPanel { public DragablePanel() { MouseHandler mouseHandler = new MouseHandler(); addMouseListener(mouseHandler); addMouseMotionListener(mouseHandler); } private class MouseHandler extends MouseInputAdapter { private int anchorX, anchorY; public void mousePressed(MouseEvent e) { anchorX = e.getX(); anchorY = e.getY(); setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); } public void mouseReleased(MouseEvent e) { setCursor(Cursor.getDefaultCursor()); } public void mouseDragged(MouseEvent e) { int x = e.getX(); int y = e.getY(); Container parent = getParent(); if (parent instanceof JViewport) { JViewport viewport = (JViewport) parent; Point p = viewport.getViewPosition(); p.translate(anchorX - x, anchorY - y); p.x = Math.max(p.x, 0); p.y = Math.max(p.y, 0); p.x = Math.min(p.x, getWidth() - viewport.getWidth()); p.y = Math.min(p.y, getHeight() - viewport.getHeight()); viewport.setViewPosition(p); } } } public static void main(String[] args) { DragablePanel p = new DragablePanel(); p.setPreferredSize(new Dimension(800, 600)); p.setLayout(new FlowLayout(FlowLayout.LEFT, 200, 200)); p.add(new JLabel("test")); JScrollPane sp = new JScrollPane(p); JFrame f = new JFrame(); f.getContentPane().add(sp, BorderLayout.CENTER); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(400, 400); f.setLocationRelativeTo(null); f.show(); }} 将图形画在一个自己的JPanel上,JPanel的PreferSize为图形的最大尺寸,然后将这个JPanel放在JScrollPane里,鼠标拖动时调用JScrollPane的设置viewport位置的方法就行了。 建议不要使用swt做图形编辑器..... ConcurrentHashMap和ConcurrentSkipListMap类如何做线程安全循环 Java 集合赋值问题! 请教线程同步问题 求助,在dos中出了11个错误,不知错了什么? 关于记事本中打开文件的问题~~ 为什么说静态变量或静态方法多的类是不好的设计? 求助诸位大侠 —— 关于文本框的问题! 用JAVA怎么得到磁盘分区的大小? 请问如何打开.pdg格式文档??? JavaUI界面不跳转?是怎么回事? 中文字符串怎么比较大小 用了OSCache,压力测试20个用户同时做一个操作就出现500错误,怎么解决?
mouseExited
mouseMoved
mouseDragged
mousePressed
mouseReleased以前做过控件的拖动,例如把一个JPanel在界面里到处拖,基本思路如下:
mouseEntered//这里面切换光标,换成一个张开的手
mouseExited//切换光标,换成正常鼠标
mousePressed//切换光标,换成抓的样子
mouseReleased//切换光标,换成一个张开的手
mouseDragged//拖动控件,刷新。这里有个问题,因为拖动的问题,所以界面有闪烁,虽然swing默认了二级缓存BufferedImage,不过还是有点不好看,当然跟我拖的是个控件可能也有关系,内容比较多,后来这块功能放弃了,就没仔细研究来优化。楼主看看对你有帮助吗?
windows里面有光标的定义,HAND_CURSOR就表示一只手的形状.在JAVA中可以用下面的方法设定:setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
另外要实现所有的图形都移动,应该通过改变坐标轴的坐标可以达到吧
import java.awt.event.MouseEvent;import javax.swing.*;
import javax.swing.event.MouseInputAdapter;public class DragablePanel extends JPanel { public DragablePanel() {
MouseHandler mouseHandler = new MouseHandler();
addMouseListener(mouseHandler);
addMouseMotionListener(mouseHandler);
} private class MouseHandler extends MouseInputAdapter { private int anchorX, anchorY; public void mousePressed(MouseEvent e) {
anchorX = e.getX();
anchorY = e.getY();
setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
} public void mouseReleased(MouseEvent e) {
setCursor(Cursor.getDefaultCursor());
} public void mouseDragged(MouseEvent e) {
int x = e.getX();
int y = e.getY(); Container parent = getParent();
if (parent instanceof JViewport) {
JViewport viewport = (JViewport) parent; Point p = viewport.getViewPosition();
p.translate(anchorX - x, anchorY - y);
p.x = Math.max(p.x, 0);
p.y = Math.max(p.y, 0);
p.x = Math.min(p.x, getWidth() - viewport.getWidth());
p.y = Math.min(p.y, getHeight() - viewport.getHeight()); viewport.setViewPosition(p);
}
}
}
public static void main(String[] args) {
DragablePanel p = new DragablePanel();
p.setPreferredSize(new Dimension(800, 600));
p.setLayout(new FlowLayout(FlowLayout.LEFT, 200, 200));
p.add(new JLabel("test"));
JScrollPane sp = new JScrollPane(p);
JFrame f = new JFrame();
f.getContentPane().add(sp, BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400, 400);
f.setLocationRelativeTo(null);
f.show();
}
}