java swing: проблема цвета заливки полигонов - PullRequest
1 голос
/ 30 июля 2010

Может ли какой-либо орган диагностировать проблему, с которой я сталкиваюсь?Когда вы запустите демонстрацию, вы увидите, что средняя часть оставлена ​​пустой, мне нужно заполнить всю область ..

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class FillDemo
{
    public static void main(String aths[])
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel pnl = new PolygonDemo();
        pnl.setSize(100, 200);
        f.getContentPane().add(pnl);
        f.setSize(400,280);
        f.setLocation(200,200);
        f.setVisible(true); 
    }
}

class PolygonDemo extends JPanel
{
    public PolygonDemo()
    {
        setBackground(Color.white);
    }

    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        Polygon p=new Polygon();

        p.addPoint(100,0);
        p.addPoint(100,100);
        p.addPoint(0,100);
        p.addPoint(0,0);

        p.addPoint(80,0);
        p.addPoint(80,20);
        p.addPoint(40,20);
        p.addPoint(40,40);
        p.addPoint(80,40);
        p.addPoint(80,100);
        p.addPoint(20,100);
        p.addPoint(20,80);
        p.addPoint(60,80);
        p.addPoint(60,60);
        p.addPoint(20,60);
        p.addPoint(20,0);
        p.addPoint(0,0);

        g2.setColor(Color.BLACK);
        g2.draw(p);
        g2.setColor(new Color(120,250,100));
        g2.fillPolygon(p);
        //g2.fillPolygon(p.xpoints,p.ypoints,p.npoints);

    }

}

Большое спасибо заранее

Ответы [ 2 ]

3 голосов
/ 30 июля 2010

Ваш полигон пересекается с самим собой. Метод fillPolygon не может четко определить, какая точка находится, а какая нет. Из заливки Polygon Javadoc:

Область внутри многоугольника определяется с использованием правила четно-нечетного заполнения, также известного как правило чередования.

Возможно, вы можете разбить свой полигон на три отдельных.

1 голос
/ 06 мая 2014

Рисование прямоугольника и цвет заливки .....

public void paint(Graphics g)
    {
int[] xPoints = {100,50,150};
int[] yPoints = {100,200,200};

      g.setColor(Color.black);
      g.drawPolygon(xPoints, yPoints, 3);
      g.setColor(Color.red);
      g.fillPolygon(xPoints, yPoints, 3);

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...