JComponent не будет показывать изображение - PullRequest
0 голосов
/ 11 февраля 2012

Я начинающий программист, и я пытаюсь запустить эту программу.Все компилируется правильно, хотя никакие изображения не появляются на новом экране Java для JComponent.Практически то, что предполагается сделать этой программой, это взять входное значение и присвоить его значениям гистограммы для размера.В программе я должен использовать класс внешней краски, чтобы запустить исходный класс, а также иметь драйвер, который, вероятно, и отталкивает меня.Заранее спасибо!

public class BarChartTester
{
public static void main(String[] args)
  {

      BarChartPaintComponent component = new BarChartPaintComponent();
      Scanner in = new Scanner(System.in);
      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.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.add(component);
      frame.setVisible(true);
    }

}

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 = 20;
        int width = 20;
        double barNumber = list.get(i);
        double size = barNumber;
        if(list.get(i) == greatest){
        g2.setPaint(Color.BLUE);
        g2.fill(new Rectangle2D.Double(x,300,width,300));
        }
        else
        {
            g2.setPaint(Color.BLUE);
             g2.fill(new Rectangle2D.Double(x,300,width, barNumber));
         }

        x +=20;

    }



}










}


public class BarChartPaintComponent extends BarChart
{
public void paintComponent(Graphics g, double array){
    Graphics2D g2 = (Graphics2D) g;
    BarChart component= new BarChart();
    component.add(array);
    component.draw(g2);

}
}

1 Ответ

2 голосов
/ 11 февраля 2012

Ваша основная проблема заключается в том, что предназначенный для рисования код никогда не будет вызываться, поскольку вы не реализуете метод paintComponent (Graphics g).Итак, замените ваш paintComponent следующим образом:

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

Затем внесите исправления, предложенные Стивенсом.

Кроме того, во втором для вас инициализируется переменная x (int x = 20),Таким образом, х будет 20 на каждой итерации цикла.Сделайте это перед циклом for.

...