繁体   English   中英

在 java 中单击鼠标时如何更改颜色?

[英]How to make Color change when mouse clicked in java?

我正在尝试制作自己的 Java GUI 项目。 我想在鼠标按下时改变线路的 colors ,但这不起作用。 我为 Colors 使用了“for”循环和数组,但这没有运行。 所以我想请你帮我解决它,也。 我想知道为什么循环需要在面板上画线。

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GraphicEx extends JFrame {
    private MyPanel panel = new MyPanel();

    public GraphicEx(){
    setTitle("Java Mondrian");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setContentPane(panel);
    setSize(400,220);
    setVisible(true);
    }

    class MyPanel extends JPanel{

        private Vector <Point> vStart = new Vector <Point>();
        private Vector <Point> vEnd = new Vector <Point>();
        Color [] c = {Color.BLUE, Color.RED, Color.YELLOW, Color.BLACK};
        private int a;
        MyPanel(){
        setBackground(Color.WHITE);
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                super.mousePressed(e);
                Point startP = e.getPoint();
                vStart.add(startP);
                for(int i=0; i<c.length; i++) {
                    if (i== (c.length-1)){
                        i=0;
                    }
                    a = i;
                    }
            }

我为颜色更改做了这个,但这不起作用。

            @Override
            public void mouseReleased(MouseEvent e) {
                super.mouseReleased(e);
                Point endP = e.getPoint();
                vEnd.add(endP);
                repaint();
            }



        });
    }       

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            //component Color & Size
            g.setColor(Color.BLACK);
            g.drawRect(10,10,50,50);
            g.setColor(Color.BLUE);
            g.fillRect(60, 60, 100, 100);
            g.setColor(Color.RED);
            g.fillRect(50,50,20,20);
            g.setColor(Color.YELLOW);
            g.fillRect(130,50,50,50);
            g.setColor(Color.RED);
            g.drawRect(170,10,50,50);
            g.setColor(Color.BLACK);
            g.fillRect(210,50,80,50);
            g.setColor(Color.YELLOW);
            g.drawRect(260,30,40,170);
            g.setColor(Color.RED);
            g.fillRect(240,130,170,40);
            g.setColor(new Color(0,0,0));
            g.setFont(new Font("Arial",Font.ITALIC, 30));
            g.drawString("Mondrian.2020", 100, 174);

            g.setColor(new Color(0,210,200));
            g.setFont(new Font("Arial",Font.BOLD,20));
            g.drawString("Draw your own Picture", 70, 100);

            g.setColor(new Color(0,0,0));
            g.drawLine(20,20,350,20);
            g.drawLine(35,0,35,180);
            g.drawLine(20,160,350,160);
            g.drawLine(330, 0, 330, 190);
            int [] x = {80, 40, 80, 120};
            int [] y = {40, 120, 200, 120};
            g.drawPolygon(x,y,4);
            g.setColor(Color.BLUE);
            g.fillArc(290, 10, 50, 50, 90, 360);


            for(int i=0; i<vStart.size();i++) { 
                Point s = vStart.elementAt(i);
                Point e = vEnd.elementAt(i);
                g.setColor(c[a]);
                g.drawLine((int)s.getX(), (int)s.getY(), (int)e.getX(), (int)e.getY());
            }
        }

    }

这部分我也看不懂? 为什么我应该使用循环来画线?

    public static void main(String[] args) {
        new GraphicEx();
    }

}

由于 colors 的供应有限,并且每条线都应该有自己的,模运算符似乎很合适:

        //Make sure both vectors have that index!
        for(int i=0; i< Math.min(vStart.size(), vEnd.size()); i++) { 
            Point s = vStart.elementAt(i);
            Point e = vEnd.elementAt(i);
            g.setColor(c[i % c.length]); //Use a calculated color using modulo length
            g.drawLine((int)s.getX(), (int)s.getY(), (int)e.getX(), (int)e.getY());
        }

此外,访问不存在的元素(还)也不好。 绘画可能随时发生 - 所以可能有开始项目没有结束项目。

如果这可行,您也可以摆脱 a 的整个计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM