单击鼠标操作之间的循环

时间:2014-10-23 20:33:35

标签: java swing mouselistener

我在Java中的作业遇到了问题。我们必须扩展类JPanel,然后以这样的方式扩展它,如果你点击面板上出现一个点,然后另一个点击连接两个点,第三个关闭一个三角形,另一个点击是全新的循环。这就是我的问题所在。编写代码很容易,每次点击都会连接到前一个点,但我不确定代码中是否嵌入了所有这些循环。

我对有关使用内容和如何继续的一些指导和/或提示感兴趣。

修改

Turtle mariska = new Turtle();`

    protected void onMouseClicked(int x1, int x2, MouseEvent detail) {
        this.add(mariska);

        if (detail.isAltDown()) {
            mariska.setFillColor(Color.blue);
        } else {
            if (detail.isShiftDown()) {
                mariska.setFillColor(Color.green);
            } else {
                mariska.setFillColor(Color.red);
            }
        }

        mariska.moveTo(x1, x2);
        mariska.dot(5);     
    }
}

1 个答案:

答案 0 :(得分:1)

我建议使用枚举来跟踪点击次数和相应的操作,但我认为你还没有了解它(如果有,你想看,留下评论)

鼠标单击时颜色之间有以下循环,并使用该颜色绘制正方形:

public class Cycler extends JPanel {

    static int x;
    static int y;
    static int state = 0;

    Cycler() {

        setBackground(Color.WHITE);
        addMouseListener(new MyMouseListener());
    }

    @Override
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        switch (state) {
            case 0:
                g.setColor(Color.RED);
                break;
            case 1:
                g.setColor(Color.BLUE);
                break;
            case 2:
                g.setColor(Color.GREEN);
                break;
        }
        g.fillRect(x, y, 20, 20);
    }

    class MyMouseListener extends MouseAdapter {

        @Override
        public void mouseClicked(MouseEvent e) {

            x = e.getX();
            y = e.getY();
            state = (state + 1) % 3;
            repaint();
        }
    }

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setContentPane(new Cycler());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

在您的情况下,您需要更改dawing操作(点或线),而不是更改颜色。