2010-07-30 7 views
1

내가 직면하고있는 문제를 신체가 진단 할 수 있습니까? 당신이 중간 부분이 공백으로 볼 수있는 데모를 실행으로 , 나는 사전에 ..자바 스윙 : 다각형 채움 색상 문제

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

귀하의 다각형이 자체 교차합니다. fillPolygon 메서드는 어느 점이 어느 점에 있는지 그리고 어느 점이 있는지를 명확하게 결정할 수 없습니다. fillPolygon javadoc에서 :

다각형 내부 영역은 짝수 홀수 작성 규칙 (대체 규칙이라고도 함)을 사용하여 정의됩니다.

아마 다각형을 세 개의 단일 것으로 나눌 수 있습니다.

+0

감사 Nokul이 g2.fillPolygon (p.xpoints, 페이지를 변경 ..... 사각형을 그리고 색을 채 웁니다. ypoints, 4); \tg2.fillPolygon (p); 하지만 이제 그려진 선이 표시되지 않습니다. 내 곡선에 다른 색상을 적용하여 표시 할 수 있습니까? 감사합니다. – lifeline2

+0

draw를 호출하기 전에 fillPolygon을 호출 해보세요. – nokul

+0

위대한 !! 다시 한 번 큰 감사를드립니다. 귀하의 제안에 따라 아래의 변경 사항이 있습니다 : g2.setColor (new Color (120,250,100)); \t g2.fillPolygon (p.xpoints, p.ypoints, 4); \tg2.fillPolygon (p); \t g2.setColor (Color.BLACK); \t g2.draw (p); – lifeline2

1

내가 할 수 다음에 지금 채울 수있는 즉각적이고 적절한 응답 에 대한

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); 

    }