2012-02-11 3 views
0

Эй, ребята, извините, что я новичок в программировании, но у меня была небольшая проблема с моей программой BarChart. Кажется, все работает нормально. То, что я хочу сделать, это ввести несколько целых чисел, а затем моя программа сгенерирует изображения для представления форм на данных. Если я введу несколько номеров, появится только одно изображение. Пожалуйста, помогите мне!В JComponent показывается только один объект

PS. Я знаю, что у меня может быть только метод paintcomponent в моем классе BarChart, но мой профессор специально хотел только эти два метода в классе.

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; 

Это должно быть перемещены из для цикла. Он получает инициализацию с одинаковым значением каждый раз, поэтому все бары рисуются в одном месте.

Если вы только что добавили System.out.println(x); в свою петлю, проблема была бы очевидна.

+0

спасибо !! Я чувствую себя настолько глупо, что не замечаю этого. Ценить это – James

 Смежные вопросы

  • Нет связанных вопросов^_^