Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.awt.Graphics在绘制后更改颜色_Java_Swing_Awt_Java 2d_Paintcomponent - Fatal编程技术网

java.awt.Graphics在绘制后更改颜色

java.awt.Graphics在绘制后更改颜色,java,swing,awt,java-2d,paintcomponent,Java,Swing,Awt,Java 2d,Paintcomponent,我刚才在这里问了一个类似的问题,但没有得到答案。最初的问题是关于单击形状后更改形状的颜色。但我很困惑,在画完形状之后,该如何访问它 这是我的paintComponent方法 @Override protected void paintComponent(Graphics graph) { super.paintComponent(graph); Graphics2D g = (Graphics2D) graph; // smooth graphics g.

我刚才在这里问了一个类似的问题,但没有得到答案。最初的问题是关于单击形状后更改形状的颜色。但我很困惑,在画完形状之后,该如何访问它

这是我的paintComponent方法

    @Override
protected void paintComponent(Graphics graph) {
    super.paintComponent(graph);
    Graphics2D g = (Graphics2D) graph;
    // smooth graphics
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    // moving to the middle of the panel
    g.translate(this.getWidth()/2, this.getHeight()/2);

    // painting colored arcs
    for(int i = 0; i < 4; i++) {
        g.setColor(dimColors[i]);
        g.fill(arcs[i]);            
    }

    // painting borders
    g.setColor(Color.BLACK);
    g.setStroke(new BasicStroke(5F));
    g.drawLine(-98, 0, 98, 0);
    g.drawLine(0, -98, 0, 98);      
    g.draw(circle);     

    // painting central white circle
    g.setColor(Color.WHITE);
    g.fill(smallCircle);        
    g.setColor(Color.BLACK);
    g.draw(smallCircle);    

}
它可以工作,它会更改圆弧[1]的颜色,因为圆弧[1]在绘制时将dimColors[1]设置为颜色

但是,我仍然不知道如何检查是否单击了右圆弧。现在只需单击图形面板上的任意位置,它就会更改特定圆弧的颜色

如果要更改的颜色(例如圆弧[0]),如何更改

一条线(或任何东西)只存在于以原始颜色绘制的一组像素中。要更改其颜色,必须更改当前颜色并再次绘制

如果要更改的颜色(例如圆弧[0]),如何更改


一条线(或任何东西)只存在于以原始颜色绘制的一组像素中。要更改其颜色,您必须更改当前颜色并再次绘制。

这并不能回答您前面的问题,但它确实回答了您的单击检测问题。为此,最好使用Graphics2D,因为它比大多数其他选项更容易编写。以下是一个例子:

     public class GraphicsPanel extends JPanel implements MouseListener
    {   
            private Rectangle2D rect;
首先,我们创建Graphics2D矩形矩形

        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D)(g);
            g2d.setColor(Color.GREEN);
            rect = new Rectangle2D.Double(70, 70, 100, 100);
            g2d.fill(rect);
            this.addMouseListener(this);
        }
然后我们重写paintComponent方法并创建新的矩形2D.Double对象。 然后用g2d.fill()填充矩形,然后将鼠标侦听器添加到JPanel

        public void mousePressed(MouseEvent e) 
            {

               if(rect.contains(e.getX(), e.getY()))
                    System.out.println("Rectangle clicked");
            }
    }

最后,我们需要查看该矩形是否包含用户单击的点。为此,只需使用Rectangle2D.double的contains(intx,inty)方法查看我们创建的矩形是否包含用户的单击位置。就这样

这并没有回答您前面的问题,但是它确实回答了您关于点击检测的问题。为此,最好使用Graphics2D,因为它比大多数其他选项更容易编写。以下是一个例子:

     public class GraphicsPanel extends JPanel implements MouseListener
    {   
            private Rectangle2D rect;
首先,我们创建Graphics2D矩形矩形

        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D)(g);
            g2d.setColor(Color.GREEN);
            rect = new Rectangle2D.Double(70, 70, 100, 100);
            g2d.fill(rect);
            this.addMouseListener(this);
        }
然后我们重写paintComponent方法并创建新的矩形2D.Double对象。 然后用g2d.fill()填充矩形,然后将鼠标侦听器添加到JPanel

        public void mousePressed(MouseEvent e) 
            {

               if(rect.contains(e.getX(), e.getY()))
                    System.out.println("Rectangle clicked");
            }
    }

最后,我们需要查看该矩形是否包含用户单击的点。为此,只需使用Rectangle2D.double的contains(intx,inty)方法查看我们创建的矩形是否包含用户的单击位置。就这样

我编辑了我的主要帖子。谢谢,我现在可以重新画弧了,但我不知道如何检查我点击了哪一个。。。你知道吗?谢谢我编辑了我的主要帖子。谢谢,我现在可以重新画弧了,但我不知道如何检查我点击了哪一个。。。你知道吗?谢谢