首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Applet MouseMotionListener和Itemlistener冲突?

Applet MouseMotionListener和Itemlistener冲突?
EN

Stack Overflow用户
提问于 2015-11-22 20:13:46
回答 1查看 67关注 0票数 0

我想使用applet用复选框绘制多条线,以选择线条的颜色。这是我的代码:

代码语言:javascript
复制
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class PaintApplet extends Applet implements MouseMotionListener,ItemListener{
    public void init() {

        setLayout(new GridLayout(1, 0));
        CheckboxGroup colorType = new CheckboxGroup();
        red = new Checkbox("red", colorType, false);
        red.addItemListener(this);
        green = new Checkbox("green", colorType, false);
        green.addItemListener(this);
        blue = new Checkbox("blue", colorType, true);
        blue.addItemListener(this);

        //setLayout(new GridLayout(0, 1));

        Panel p = new Panel();
        add(p);
        p.add(red);
        p.add(green);
        p.add(blue);

        addMouseMotionListener(this);
    }

    public void itemStateChanged(ItemEvent e) {
        if (e.getSource() == red)
           System.out.println("red");
        else if (e.getSource()==green)
            System.out.println("green");
        else if (e.getSource()==blue)
            System.out.println("blue");
    }

    public void mouseDragged(MouseEvent e) {
        draw=true;
       // X=new Vector<Integer>();
       // Y=new Vector<Integer>();
        X.add(e.getX());
        Y.add(e.getY());
        System.out.println("mouse is being dragged at location (" + e.getX() + ", " + e.getY() + ")");
        DrawX.add(X.get(lastSize));
        DrawY.add(Y.get(lastSize));
        DrawX.add(X.get(X.size()-1));
        DrawY.add(Y.get(Y.size()-1));
        repaint();
        lastSize=X.size();
        //System.out.println(lastSize);
    }

    public void mouseMoved(MouseEvent e) {
        //System.out.println("mouse is being moved at location (" + e.getX() + ", " + e.getY() + ")");
    }


    public void paint(Graphics g) {
        for(int i=0;i<X.size()-1;i=i+2)
        {
                initX=DrawX.get(i);
                initY=DrawY.get(i);
                finalX=DrawX.get(i+1);
                finalY=DrawY.get(i+1);
                //g.drawLine(0, 0, 100, 100);
                if(draw)
        g.drawLine(initX, initY, finalX, finalY);
        g.setColor(Color.blue);
           //System.out.println(initX);
           //System.out.println(finalY); 
        }
           super.paint(g);
           //repaint();

    }

    int lastSize=0;
    int initX,initY;
    int finalX,finalY;
    Vector<Integer> X=new Vector<Integer>();
    Vector<Integer> Y=new Vector<Integer>();
    boolean draw=false;
    Vector<Integer> DrawX=new Vector<Integer>();
    Vector<Integer> DrawY=new Vector<Integer>();
    Checkbox red,green,blue;
}

但是,代码的问题是,当正确显示复选框时,拖动鼠标时不能绘制行,但是删除复选框时,行绘制函数是工作的。当我实现MouseMotionListener和ItemListener时有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-22 21:18:02

您可以尝试将两个侦听器放入两个分隔的线程中。下面是如何设置线程

使用这种方法,两个侦听器分别工作,同时工作,这样它们就不会彼此阻塞。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33859636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档