首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java画图的有关问题

2012-04-06 
java画图的问题共有四个文件文件一:MoveBaseComponents.javaJava codeimport java.awt.*import java.awt.

java画图的问题
共有四个文件
文件一:MoveBaseComponents.java

Java code
import java.awt.*;import java.awt.event.*;public class MoveBaseComponents extends Canvas {    static private int x; // 中间变量之横坐标    static private int y; // 中间变量之纵坐标    static private int mouseX; // 鼠标按键横坐标    static private int mouseY; // 鼠标按键纵坐标    static private Point point; // 组件位置    static private Color background = Color.red; // 组件背景颜色    MoveBaseComponents() {        addMouseListener(new Move());        addMouseMotionListener(new Move());        point = new Point(100, 100);        // position();        setBackground(background);        setBounds(50, 50, 50, 50);    }    // 组件定位    public void position() {        setLocation(point);        // repaint();    }    class Move extends MouseAdapter {        public void mousePressed(MouseEvent e) {            mouseX = e.getX();            mouseY = e.getY();        }        public void mouseReleased(MouseEvent e) {            mouseX = 0;            mouseY = 0;        }        public void mouseDragged(MouseEvent e) {            Component com = (Component) e.getSource();            x = com.getX() + e.getX() - mouseX;            y = com.getY() + e.getY() - mouseY;            // 需要做边界限定            point.setLocation(x, y);            position();            // 重合区域变色            Rectangle rectSource = com.getBounds();            Rectangle rectDesc = null;            for (Object obj : Basic.vector) {                if (e.getSource() == obj) {                    continue; // 消除点击后本控件着色                }                rectDesc = ((Component) obj).getBounds();                if (rectSource.intersects(rectDesc)) {                    Rectangle good = rectSource.intersection(rectDesc);//重合区域                    // 新建重合部分                    Graphics pen = com.getGraphics();                    pen.setColor(Color.green);                    pen.fillRect(good.x - rectSource.x, good.y - rectSource.y, good.width, good.height);//                    System.out.println((good.x - rectSource.x) + "," + (good.y - rectSource.y) + "," + good.width + "," + good.height);//                    System.out.println(com);//                    System.out.println(pen);                }            }        }    }    public void mouseMoved(MouseEvent e) {        // System.out.println("move = " + e.getSource());    }}



文件二:MyApplet.java
Java code
import java.applet.Applet;import java.awt.Component;public class MyApplet extends Applet {    @Override    public Component add(Component comp) {        Basic.add(comp);        super.add(comp);        return comp;    }    @Override    public void remove(Component comp) {        Basic.remove(comp);        super.remove(comp);    }}



文件三:Basic.java
Java code
import java.util.Vector;public class Basic {    public static Vector vector = new Vector();    public static void add(Object obj) {        vector.add(obj);    }    public static void remove(Object obj) {        vector.remove(obj);    }}



文件四:main.java
Java code
public class main extends MyApplet {    MoveBaseComponents[] aa = {new MoveBaseComponents(), new MoveBaseComponents(),new MoveBaseComponents(),new MoveBaseComponents()};    public void init() {        for(int i=0 ; i<aa.length ; i++){            add(aa[i]);        }    }}



问题描述:
运行时,会有四个矩形,背景色为红色;
四个矩形可以拖拽;


当一个矩形与另一个矩形有重合部分时,重合部分会变成绿色(我是在拖拽的矩形上画图)
不过,如果把矩形依次命名为1、2、3、4,拖拽矩形1与2、3、4重合时,重合部分为绿色;拖拽2与3、4重合时,重合部分为绿色,而与1重合部分不变色;依次类推,拖拽4与1、2、3重合,重合部分均不变色
请问这是怎么回事呢?我写的代码哪里有问题?请各位大虾不吝赐教

[解决办法]
你说一个问题,你的程序在退出重合状态时下有时候不能恢复其原来的背景颜色,红色。
在"// 重合区域变色"前重置一下颜色就可以解决
Graphics pen = com.getGraphics();
pen.setColor(background);
pen.fillRect(0, 0, 50, 50);
这样改的话别忘了下面的pen不用重新定义了。那行代码要删除掉。
至于你说的移动2重合1时不能变色,我猜测可能是顺序问题。因为1是顺序最高,所以你虽然把2的重合部分变色了。但是1的所有区域颜色还是红色。而1可能默认会覆盖2的东西。建议你在给重合区域变色时,2个组件的
重合部分都变色。

热点排行