2017-01-30 2 views
0

Мы не можем вполне понять, как можно сделать этот PieChart появиться:Как мы можем нарисовать этот класс piechart?

import java.awt.*; 
import java.awt.Graphics2D; 
import java.awt.Graphics; 
import javax.swing.*; 


public class PieChart extends View { 

    public PieChart (Model model){ 
     super(model); 
     MyComponent piechart = new MyComponent(); 
     this.add(piechart); 
    } 
    public void updateView(){ 
     repaint(); 
    } 
} 

class MyComponent extends JComponent { 
    Slice[] slices = { 
      new Slice(5, Color.black), new Slice(33, Color.green), new Slice(20, Color.yellow), new Slice(15, Color.red) 
    }; 

    MyComponent() { 
     setVisible(true); 
    } 

    public void paint(Graphics g) { 
     drawPie((Graphics2D) g, getBounds(), slices); 
    } 

    void drawPie(Graphics2D g, Rectangle area, Slice[] slices) { 
     double total = 0.0D; 

     for (int i = 0; i < slices.length; i++) { 
      total += slices[1].value; 
     } 
     double curValue = 0.0D; 
     int startAngle = 0; 
     for (int i = 0; i < slices.length; i++) { 
      startAngle = (int) (curValue * 360/total); 
      int arcAngle = (int) (slices[i].value * 360/total); 
      g.setColor(slices[i].color); 
      g.fillArc(area.x, area.y, area.width, area.height, startAngle, arcAngle); 
      curValue += slices[i].value; 
     } 
    } 
} 

class Slice { 
    double value; 
    Color color; 
    public Slice(double value, Color color) { 
     this.value = value; 
     this.color = color; 
    } 
} 

и класс простирается от «точки зрения»

import javax.swing.*; 


@SuppressWarnings("serial") 
public class View extends JPanel { 
    public Model model; 

    public View(Model model) { 
     this.model=model; 
     model.addView(this); 
    } 

    public void setModel(Model model) { 
     this.model=model; 
    } 

    public Model getModel() { 
     return model; 
    } 

    public void updateView() { 
     repaint(); 
    } 
} 

и, наконец, класс, который вызывает все мнения (только применимый код показан)

public class Simulator { 

    .... 
    private View pieChart; 

    public Simulator(int floors, int rows, int places) { 
     //initialiseert Model 
     floornumber = floors; 
     rownumber = rows; 
     placenumber = places; 

     model=new Model(floornumber,rownumber,placenumber); 

     screen=new JFrame("Parkere simulatie"); 
     screen.setTitle("Parkeer-control Screen"); 
     screen.setSize(1600, 1000); 
     screen.setResizable(false); 
     screen.setLayout(null); 
     ........ 

     pieChart = new PieChart(model); 
     screen.getContentPane().add(pieChart); 
     pieChart.setBounds(840, 300, 300, 300); 
    } 
} 

Я думаю, что проблема является метод краски(). Мы не можем назвать это нигде, но я уверен, что мы должны делать это по-другому, потому что это панель вместо кадра. Кто-нибудь знает, как мы можем это исправить?

+1

Я знаю, вы используете Качели, однако JavaFX предоставляет определенный диаграмм, например a [PieChart] (https://docs.oracle.com/javase/8/javafx/api/javafx/scene/chart/PieChart.html). Просто хотел упомянуть об этом. – pzaenger

+1

@pzaenger отличная помощь;) –

+1

Спасибо за подсказку, теперь мы получили piechart, идущий с javaFX :) –

ответ

1

Вы не показываете экран на экране. (Например, SetVisible) - это будет вызывать краску детей при необходимости автоматически затем

снова: сделать фрейм видимым и дети будут окрашены в кадре

+1

Точно. В Swing вы почти никогда не называете 'paint()' себя. Вместо этого вы делаете что-то видимое (в данном случае «экран») и Swing, чтобы он рисовал все его подкомпоненты. – hendrik

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