2016-12-02 8 views
0

私の目標はランダムな位置を持つランダムな車やトラックを10回作成することです。 JFrameに多数のJPanelを追加しようとすると、1つしか表示されません。 randomVehicle()メソッドを呼び出すと、一度に複数のVehicleを描画することができます。print文を追加してロジックをチェックしてみましたが、私は迷っています。以下のようなループのためのJPanelをJFrameに10回追加する方法

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Line2D; 
import java.awt.geom.Point2D; 

import javax.swing.JComponent; 
import javax.swing.JFrame; 
public class GraphicsTester { 

    public static void main(String[] args) { 
     //1. Create the frame. 
     JFrame frame = new JFrame(); 
     //2. Optional: What happens when the frame closes? 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     //4. Size the frame. 
     frame.setSize(2000, 2000); 
     //5. Show it. 

     Vehicle frame1 = new Vehicle(); 
     frame.add(frame1.randomVehicle()); 
     frame.add(frame1.randomVehicle()); 
     frame.setVisible(true); 
    } 

} 

Vehicleクラス

import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Line2D; 
import java.awt.geom.Point2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

import java.awt.Graphics; 
public class Vehicle extends JPanel { 

    public Vehicle() { 
    xPos = (int) (Math.random() * 500) + 1; 
    yPos = (int) (Math.random() * 500) + 1; 
    } 

    public Vehicle randomVehicle() { 
     int vehicleRandom = (int) (Math.random() * 2) + 1; 
     System.out.println(vehicleRandom); 
     if (vehicleRandom==1) { 
      return new Car(); 
     } 
     if (vehicleRandom==2) { 
      return new Truck(); 
     } 
     return null; 
    } 


    protected int xPos; 
    protected int yPos; 

} 

カー

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Line2D; 
import java.awt.geom.Point2D; 
import javax.swing.JFrame; 

public class Car extends Vehicle { 

    public Car() { 
     super(); 
     System.out.println(xPos); 
     System.out.println(yPos); 
    } 

    public void paint(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.draw(new Rectangle(xPos + 100, yPos + 100, 200, 50)); 
     g2d.draw(new Rectangle(xPos + 150, yPos + 85, 100, 15)); 
     g2d.draw(new Ellipse2D.Double(xPos + 120, yPos + 150, 50, 35)); 
     g2d.draw(new Ellipse2D.Double(xPos + 220, yPos + 150, 50, 35)); 
    } 

} 

トラック

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.geom.Ellipse2D; 

public class Truck extends Vehicle { 

    public Truck() { 
     super(); 
     System.out.println(xPos); 
     System.out.println(yPos); 
    } 

    public void paint(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.draw(new Rectangle(xPos + 100, yPos + 100, 50, 75)); 
     g2d.draw(new Ellipse2D.Double(xPos + 110, yPos + 175, 35, 35)); 
     g2d.draw(new Rectangle(xPos + 180, yPos + 70, 350, 106)); 
     g2d.draw(new Ellipse2D.Double(xPos + 190, yPos + 175, 35, 35)); 
     g2d.draw(new Ellipse2D.Double(xPos + 225, yPos + 175, 35, 35)); 
     g2d.draw(new Ellipse2D.Double(xPos + 475, yPos + 175, 35, 35)); 
     g2d.draw(new Ellipse2D.Double(xPos + 440, yPos + 175, 35, 35)); 
    } 

} 
+0

* 'public class VehicleはJPanelを拡張しています。{..' *これはカスタムペイントで行っていきます。したがって、 'Vehicle'は' JPanel'を拡張するのではなく、 'Car'と' Truck'が実装する必要がある 'public abstract void draw(Graphics);メソッドを宣言してください。 –

答えて

0

ユースA ..

Vehicle frame1 = new Vehicle(); 

for(int i=0;i<10;i++) { 
frame.add(frame1.randomVehicle()); 
} 

frame.setVisible(true); 
+0

私はそれを試みましたが、メソッドが10回呼び出されても1台の車両しか描画されないという問題があります。 – johnbumble

+0

これは、2番目のコンポーネントが最初のコンポーネントの上に追加されているためです。これを参照してください.http://stackoverflow.com/questions/13881444/only-one-component-shows-up-in-jframe – Jobin

関連する問題