-
명품JAVA 12장 실습문제 9번CSE/Java 2015. 6. 13. 10:57123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117package endPack;import java.awt.*;import javax.swing.*;import java.awt.event.*;public class P9 extends JFrame {private Container c;private String[] item = { "Apple", "Cherry", "Strawberry", "Prune" };// label 명을 담은 String 배열 형 itemprivate JLabel[] j = new JLabel[4];// label 4개 선언private JTextField[] f = new JTextField[4];// TextField 4개 선언private int[] data = new int[4];// 각 과일별로 수치를 담을 data 배열private int[] arc = new int[4];// 각 과일별로 각도·퍼센트를 담을 arc 배열private Color[] cc = { Color.red, Color.blue, Color.magenta, Color.yellow };P9() {super("파이 차트 그리기");// Title 파이 차트 그리기setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Default 종료 동작 설정c = getContentPane();// ContentPane Container 연결BorderLayout bl = new BorderLayout();c.setLayout(bl);// Border Layout 스타일로 c 지정NPanel np = new NPanel();CPanel cp = new CPanel();// North Panel과 Center Panel 선언/** North Panel : 상단의 과일들의 percentage 값 주기 위한 Panel* Center Panel : North Panel의 각 과일들의 입력값으로 부터 Pi 차트를 생성하기 위한 panel*/c.add(np, bl.NORTH);c.add(cp, bl.CENTER);// 각각의 Panel을 c Container에 AddsetSize(500, 400);setVisible(true);// Container 의 Size와 Visible 설정}// 스트링과 차트를 그리기 위한 Methodvoid drawChart() {int sum = 0;for (int i = 0; i < data.length; i++) {data[i] = Integer.parseInt(f[i].getText());sum += data[i];}// 각도를 구하기 위한 공식법 ( 해답에서 따옴)for (int i = 0; i < data.length; i++) {arc[i] = (int) Math.round((double) data[i] / (double) sum * 360);}// 다시 그리라는 repaint()를 호출한다.repaint();}// Frame 에 North 에 붙을 NPanelclass NPanel extends JPanel {public NPanel() {setBackground(Color.LIGHT_GRAY);setLayout(new FlowLayout());for (int i = 0; i < 4; i++) {j[i] = new JLabel(item[i]);f[i] = new JTextField(5);// Label 과 TextField 를 초기화 해준다.add(j[i]);add(f[i]);f[i].addActionListener(new MAL());}}// enter 입력시에 drawChart Method 를 실행 한다.class MAL implements ActionListener {public void actionPerformed(ActionEvent e) {drawChart();}}}class CPanel extends JPanel {public void paintComponent(Graphics g) {super.paintComponent(g);int startarc = 0;for (int i = 0; i < data.length; i++) {g.setColor(cc[i]);g.drawString(item[i] + " " + Math.round(arc[i] * 100. / 360.)+ "%", 50 + i * 100, 20);}for (int i = 0; i < data.length; i++) {g.setColor(cc[i]);g.fillArc(150, 50, 200, 200, startarc, arc[i]);startarc = startarc + arc[i];}}}public static void main(String args[]) {new P9();}}
실행화면 :
'CSE > Java' 카테고리의 다른 글
[Java] 명품 자바 프로그래밍(Java Programming) 3장 실습문제 8번 (0) 2015.06.13 [Java] 명품 자바 프로그래밍(Java Programming) 3장 실습문제 2번 (0) 2015.06.13 [Java] 명품 자바 프로그래밍(Java Programming) 3장 Open Challenge (0) 2015.06.13 [Java] 명품 자바 프로그래밍(Java Programming) 2장 Open Challenge (0) 2015.06.13 명품JAVA 12장 Open Challenge (0) 2015.06.13 명품JAVA 11장 실습문제 10번 (0) 2015.06.13