2012-02-11 19 views
0

ごめんなさい、私はプログラミングには少し慣れていますが、BarChartプログラムには少し問題がありました。すべてが正常に実行されているようです。私がしたいことは、いくつかの整数を入力してから、自分のプログラムでデータをフォームを表現するための画像を生成させることです。いくつかの数字を入力すると、1つの画像しか表示されません。私を助けてください!JComponentでは、1つのオブジェクトしか表示されていません

PS。私はBarChartクラスの中にpaintcomponentメソッドを持つことができますが、私の教授は具体的にはクラス内のこれら2つのメソッドだけを必要としていました。

import javax.swing.JFrame; 
import java.util.Scanner; 
public class BarChartTester 
{ 
public static void main(String[] args) 
    { 

     BarChartPaintComponent component = new BarChartPaintComponent(); 
     Scanner in = new Scanner(System.in); 
     BarChart test = new BarChart(); 
     System.out.println("Enter the Values you wish to use (>0). Press -1 on an empty line to stop"); 
     Boolean flag = false; 
     while(!flag) 
     { 
      double numbers = in.nextDouble(); 
      if(numbers == -1) 
      flag = true; 
      else if(numbers<-1) 
      System.out.println("You have typed in invalid number"); 
      else 
      component.add(numbers); 
    } 
     JFrame frame = new JFrame(); 
     frame.setSize(300, 300); 
     frame.setTitle("A Bar Graph"); 
     frame.add(component); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     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 java.awt.geom.*; 
import javax.swing.JComponent; 
import java.util.ArrayList; 

public class BarChart extends JComponent 
{ 
private ArrayList<Double> list; 
private double value; 
private int i; 

public BarChart() 
{ 

    list = new ArrayList<Double>(); 
} 


public void add(double value) 
{ 
    list.add(i, value); 
    i++; 
} 

public void draw(Graphics g) 
{ 
    Graphics2D g2 = (Graphics2D) g; 

    Double greatest = list.get(0); 
    Double least; 
    for(int j =1;j<list.size();j++) 
    { 
     if(list.get(j)> greatest) 
     greatest = list.get(j); 
     else 
     least = list.get(j); 
    } 

    for(int i = 0;i<list.size();i++) 
    { 
     int x = 10; 
     int width = 20; 
     double barNumber = list.get(i); 
     if(barNumber == greatest){ 
     g2.setPaint(Color.BLUE); 
     g2.fill(new Rectangle2D.Double(x,0,width,300)); 
     } 
     else 
     { 
      g2.setPaint(Color.BLUE); 
      g2.fill(new Rectangle2D.Double(x,0,width, barNumber)); 
     } 

     x +=20; 

    } 



} 
} 

import java.awt.Graphics; 
import java.awt.Graphics2D; 


public class BarChartPaintComponent extends BarChart 
{ 
public void paintComponent(Graphics g) 
{ 
    Graphics2D g2 = (Graphics2D) g; 
    this.draw(g); 
} 
} 

答えて

1
int x = 10; 

これは、forループの外に移動する必要があります。毎回同じ値に初期化されているので、すべての棒が同じ場所に描画されます。

forループの中にSystem.out.println(x);を追加しただけでは、この問題は明らかでした。

+0

ありがとうございます!私はこれに気付かなかったのでとても馬鹿だと感じる。感謝します – James