如何在java中使鼠标点击时颜色改变?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java中使鼠标点击时颜色改变?相关的知识,希望对你有一定的参考价值。
我想做一个自己的Java GUI项目。我想让鼠标按下时,线条的颜色发生变化,但这是行不通的。我使用了'for'循环和Colors的数组,但这不能运行。所以我想请您帮我解决一下! 另外,我想知道为什么在面板上画线需要用循环。
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();
答案
由于颜色的数量有限,而且每一行都应该有自己的颜色,所以用modulo运算符似乎很合适。
//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的计算。
以上是关于如何在java中使鼠标点击时颜色改变?的主要内容,如果未能解决你的问题,请参考以下文章
Java Robot类鼠标移动到特定像素的位置(鼠标单击一种颜色)