2016-09-25 13 views
-1

私の先生は今週末にプロジェクトのために家を建てたいと思っていました。屋根のために使っている三角形の色を塗りつぶす方法を理解することができます。私はJavaで非常に新しいので、コードはかなりうまくありますが、誰かが私を助けることができたら、それは素晴らしいでしょう!(私の先生はコードの長さに本当に気をつけません。 。 ここに私のコード:この三角形の色を3行で塗りつぶすにはどうすればよいですか?

import java.awt.Color; 
import java.awt.Dimension; 
import javax.swing.SwingUtilities; 
import javax.swing.JFrame; 

public class HouseMaker 
{ 
    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     frame.setSize(3000, 3000); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.getContentPane().setBackground(Color.BLUE); 

     HouseComponent component = new HouseComponent(); 
     frame.add(component); 

     frame.setVisible(true); 
    } 
} 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Line2D; 
import javax.swing.JComponent; 
import java.awt.Polygon; 

/* 
    A component that draws an house with a sun and other things 
*/ 
public class HouseComponent extends JComponent 
{ 
    public void paintComponent(Graphics g) 
    { 
     // Recover Graphics2D 
     Graphics2D g2 = (Graphics2D) g; 

     // Draw the house frame 
     g2.setColor(Color.GRAY); 
     Rectangle frame = new Rectangle(300, 400, 500, 230); 
     g2.fill(frame); 

     // Draw the roof 
     Line2D.Double roof = new Line2D.Double(300, 400, 800, 400); 
     g2.setColor(Color.RED); 
     g2.drawLine(300, 400, 550, 200); 
     g2.setColor(Color.RED); 
     g2.drawLine(800, 400, 550, 200); 
     g2.setColor(Color.RED); 
     g2.draw(roof); 

     //sun in the sky 
     g2.setColor(Color.YELLOW); 
     g.drawOval(50,50,100,100); 
     g2.setColor(Color.YELLOW); 
     g2.fillOval(50,50,100,100); 
     g2.drawLine(50,50,20,20); 
     g2.setColor(Color.YELLOW); 
     g2.drawLine(150,150,180,180); 
     g2.drawLine(150,50,180,20); 
     g2.drawLine(50,150,20,180); 
     g2.drawLine(30,100,-10,100); 
     g2.drawLine(100,30,100,-10); 
     g2.drawLine(170,100,210,100); 
     g2.drawLine(100,170,100,210); 

     //Draw the door 

     g2.setColor(Color.BLACK); 
     Rectangle door = new Rectangle(450, 510, 50, 120); 
     g2.fill(door); 

     //Draw door knob 
     g2.setColor(Color.WHITE); 
     g2.drawOval(450,560,10,10); 
     g2.setColor(Color.WHITE); 
     g2.fillOval(450,560,10,10); 

     //Draw three windows 

     g2.setColor(Color.BLACK); 
     Rectangle window = new Rectangle(350, 520, 50, 50); 
     g2.fill(window); 
     g2.setColor(Color.BLACK); 
     Rectangle window1 = new Rectangle(550, 520, 50, 50); 
     g2.fill(window1); 
     g2.setColor(Color.BLACK); 
     Rectangle window2 = new Rectangle(650, 520, 50, 50); 
     g2.fill(window2); 

     //Draw window panes 
     g2.setColor(Color.WHITE); 
     g2.drawLine(350,545,400,545); 
     g2.drawLine(375,520,375,570); 
     g2.drawLine(550,545,600,545); 
     g2.drawLine(575,520,575,570); 
     g2.drawLine(650,545,700,545); 
     g2.drawLine(675,520,675,570); 

     //Draw ground 
     g2.setColor(Color.GREEN); 
     Rectangle ground = new Rectangle(0, 630, 1500, 1500); 
     g2.fill(ground); 
    } 
} 
+0

三角形を描画して塗りつぶすには、 'drawLine()'を3回呼び出しないでください。 'drawPolygon()'を使って描画し、 'fillPolygon()'を使って描画します。 「グラフィックス」(https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html)用のjavadocを簡単に読んだら、利用可能な 'fill'メソッドを示しています。 – Andreas

+0

それは問題ですが。 drawPolygonの使い方は分かりません。私はオプションとしてそれを研究してきましたが、私はそれを使用する方法を理解していません。試してみるとうまくいかない。 – CrypticZero

+0

どのように三角形を描きますか? 3つの 'x、y '点を使い、AからB、BからC、CをAに戻します。 .org/wiki/Polygon)。 3つの 'x、y '点で定義される形状。 [fillPolygon(int [] xPoints、int [] yPoints、int nPoints) '](https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html#fillPolygon-int: A-int:A-int-):* x座標とy座標の配列で定義された閉じた多角形を塗りつぶします。* – Andreas

答えて

0

[OK]を、何か新しいことを学ぶ時間ですか?

/* Have a look over java.awt.geom.GeneralPath*/ 
// Draw the roof 
GeneralPath shape=new GeneralPath(); 
shape.moveTo(300, 400) 
shape.lineTo(800, 400); 
shape.lineTo(550, 200); 
shape.closePath(); // easier than shape.lineTo(300, 400); 
g2.setColor(Color.RED); 
g2.fill(shape); 

// let's get a tinge of pink for the outline; 
Stroke origStroke=g2.getStroke(); // just to restore it afterwards 
g2.setColor(Color.PINK); 
g2.setStroke(new BasicStroke(0.5f)); // WHOA, is that something new? 
g2.draw(shape); // reusing it, why bother creating other lines? 

// as we don't want the next drawing to go with a thin line, 
// restore the old stroke 
g2.setStroke(origStroke); 
+0

または 'p = new Polygon(); p.addPoint(300,400); p.addPoint(800,400); p.addPoint(550,200); g2.fillPolygon(p); ' ---または単に 'g2.fillPolygon(新しいint [] {300,800,550}、新しいint [] {400,400,200}、3); ' – Andreas

+0

ありがとう!それは本当に役立ちます。私たちはポリゴンの使い方をまだ学んでいませんでしたが、3線で三角形を作って欲しいと言ったので、ポリゴン以外の解決策があることを嬉しく思います! – CrypticZero

+0

@Andreasそれから、 'p.curveTo(...)'を試してみてください。私のポイント? 'GeneralPath'は、' Polygon'が行うことを行い、少し(実際はたくさん)行います。 –

関連する問題