小弟是菜鸟,自学java,现在有个问题一直解决不了,求各位高手帮助!我已经画好了一个矩形,如何能实现用鼠标拖动到面板上的任意位置呢?
import java.awt.*;
import java.awt.event.*;
public class JX extends Frame {
public void paint(Graphics g){
g.drawRect(50,50,100,100);
}
public static void main (String[] args) {
JX p = new JX();
p.setSize(400,400);
p.setVisible(true);
p.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
import java.awt.*;
import java.awt.event.*;
public class JX extends Frame {
public void paint(Graphics g){
g.drawRect(50,50,100,100);
}
public static void main (String[] args) {
JX p = new JX();
p.setSize(400,400);
p.setVisible(true);
p.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
解决方案 »
- Boys&Girls 问个关于SWT的browser的问题。。
- 如何定制邮件的发送时间在晚上八点以后
- 保存图片
- 求助!!!用线程控制划随鼠标移动随即显示的线,报错了!
- jcreate实现比赛评分系统源代码
- 问问东软的情况。
- 我的毕业论文不合格
- 还是JAVA的事件处理
- Image img = getImage(getDocumentBase(),"print.gif"); 产生SecurityException:Cannot access ...server,然后跳到下面的catch语句
- 请教一道JAVA题目
- 编译成功但是运行时候出现Exception in thread "main" java.lang.NullPointerException【附源码】
- 求一个简单的Java界面
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.*;
/**
*
* @author KILLer
*/
public class DragRectangle extends JComponent {
private Rectangle2D rect=new Rectangle2D.Double(50,50,100,100);
boolean needDrag=false;
public DragRectangle(){
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
}
public static void main(String[] args){
JFrame f=new JFrame();
f.add(new DragRectangle());
f.setVisible(true);
f.setSize(300, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.draw(rect);
}
private class MouseHandler extends MouseAdapter
{
@Override
public void mousePressed(MouseEvent event)
{
if(rect.contains(event.getPoint()))
needDrag=true;
else
needDrag=false;
}
} private class MouseMotionHandler implements MouseMotionListener
{
public void mouseMoved(MouseEvent event)
{
}
public void mouseDragged(MouseEvent event)
{
if (needDrag)
{
int x = event.getX();
int y = event.getY();
rect.setFrame(x-rect.getWidth()/2, y - rect.getHeight() / 2, rect.getWidth(), rect.getHeight());
repaint();
}
}
}
}
只要needDrag为true时,才执行mouseDragged方法中的内容。
import java.awt.*;
import java.awt.event.*;
public class JX {
public static void main (String[] args) {
TFrame t = new TFrame();
}
} class TFrame extends Frame{
static int x = 50;
static int y = 50;
TFrame(){
setLayout(null);
setSize(500,500);
addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e) {
int xstart = e.getX();
int ystart = e.getY();
x = xstart;
y = ystart;
repaint();
}
});
/* addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDrag(MouseEvent e){
int xstart = e.getX();
int ystart = e.getY();
x = xstart;
y = ystart;
repaint();
}
});*/
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
}
public void paint(Graphics g) {
g.drawRect(x ,y ,100,100);
}
}
现在能实现我的鼠标点到那里,图形就移动到那里。不能拖拽,我想用加注释的这段代码,可问题是取不到鼠标坐标x、y的值。
int xstart = e.getX();
int ystart = e.getY();
x = xstart;
y = ystart;
这怎么解决?是不是方法用错了?
要实现什么功能?
我不太明白你的需求。
而且,为什么要int xstart = e.getX();
int ystart = e.getY();
x = xstart;
y = ystart; //这不就成了吗
x= e.getX();
y= e.getY();
MouseMotionAdapter的方法是mouseDragged,而不是mouseDrag。我看了半天才发现。汗啊~~~
这下应该没问题了吧!?
public void mousePressed(MouseEvent event)
{
if(rect.contains(event.getPoint()))
needDrag=true;
else
needDrag=false;
}
}这个事说如果我的鼠标在矩形区域里才允许拖动;我这个怎么改才能实现你所说的功能import java.awt.*;
import java.awt.event.*;
public class JX {
public static void main (String[] args) {
TFrame t = new TFrame();
}
} class TFrame extends Frame {
boolean needDrag = false;
static int x = 50;
static int y = 50;
TFrame(){
setLayout(null);
setSize(500,500);
addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e) {
int xpoint = e.getX();
int ypoint = e.getY();
if((xpoint>=50&xpoint<=150)&(ypoint>=50&ypoint<=150)) needDrag = true;
else
needDrag = false;
}
});
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
if(needDrag){
int xstart = e.getX();
int ystart = e.getY();
x = xstart;
y = ystart;
repaint();
}
}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
}
public void paint(Graphics g) {
g.drawRect(x ,y ,100,100);
}
}
needDrag = true;
else
needDrag = false;换成if((xpoint>=x&xpoint <=x+100)&(ypoint>=y&ypoint <=y+100))
needDrag = true;
else
needDrag = false;就哦了