본문 바로가기

JAVA/개발

[JAVA] 파이 차트

합이 100이 되게 각 apple, chrrey, strawberry, prune의 4가지 종류의 과일 판매량을 입력하고 <Enter>키를 치면 전체 판매량에서 백분율(%)을 계산하여 문자열과 파이 차트로 동시에 출력한다. 현재 코드가 퍼센트 1당 3.6도의 원을 그리는 방식이라 합을 100에 모자라게 넣으면 빈 공간이 생기는데 발전할 수 있는 포인트다.

 

 

코드

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class eleven extends JFrame{
	JPanel jp=new JPanel();
	MyPanel panel=new MyPanel();
	String[]fruits= {"apple","cherry","strawberry","prune"};
	JLabel[]jl=new JLabel[4];
	JLabel[]jl2=new JLabel[4];
	JTextField []jt=new JTextField[4];
	int []key=new int[4];//입력값
	int []ans=new int[4];//백분율
	int []ang=new int[4];//각도
	Color []col= {Color.red,Color.blue,Color.magenta,Color.yellow};
	public eleven() {
		setTitle("파이 차트 그리기");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container c=getContentPane();
		c.setLayout(new BorderLayout());
		
		jp.setLayout(new FlowLayout());
		jp.setBackground(Color.LIGHT_GRAY);
		for(int i=0;i<fruits.length;i++) {
			jl[i]=new JLabel(fruits[i]);
			jt[i]=new JTextField(5);
			jt[i].addActionListener(new MyActionListener());
			jp.add(jl[i]);
			jp.add(jt[i]);
		}

		panel.setLayout(null);
		for(int i=0;i<fruits.length;i++) {
			jl2[i]=new JLabel();
			panel.add(jl2[i]);
			jl2[i].setSize(120,20);
			jl2[i].setFont(new Font("Serif",Font.BOLD,16));
			jl2[i].setLocation(50+i*130, 0);
		}
		c.add(jp,BorderLayout.NORTH);
		c.add(panel,BorderLayout.CENTER);
		
		setSize(600,500);
		setVisible(true);
	}
	class MyPanel extends JPanel{
		public MyPanel() {
			addMouseListener(new MouseAdapter() {
				public void mousePressed(MouseEvent e) {
					System.out.println("click");
				}
			});
		}	
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.setColor(Color.red);
			g.fillArc(getWidth()/2-150, 100, 300, 300, 0, ang[0]);
			g.setColor(Color.blue);
			g.fillArc(getWidth()/2-150, 100, 300, 300, ang[0], ang[1]);
			g.setColor(Color.magenta);
			g.fillArc(getWidth()/2-150, 100, 300, 300, ang[0]+ang[1], ang[2]);
			g.setColor(Color.yellow);
			g.fillArc(getWidth()/2-150, 100, 300, 300, ang[0]+ang[1]+ang[2], ang[3]);
		}
	}
	class MyActionListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			double sum=0;
			for(int i=0;i<key.length;i++) {
				key[i]=Integer.parseInt(jt[i].getText());
				sum+=key[i];
			}
			for(int i=0;i<key.length;i++) {
				ans[i]=(int) Math.round(key[i]/sum*100);
				ang[i]=(int)Math.round(ans[i]*3.6);
			}
			for(int i=0;i<fruits.length;i++) {
				jl2[i].setText(fruits[i]+" "+ans[i]+"%");
				jl2[i].setForeground(col[i]);
			}
			panel.repaint();
		}	
	}
	public static void main(String[]args) {
		new eleven();
	}
}

'JAVA > 개발' 카테고리의 다른 글

[JAVA] 슬롯 머신  (0) 2023.02.17
[JAVA] 스네이크 게임  (0) 2022.10.07
[JAVA] 간단 순발력 테스트  (0) 2022.08.12
[JAVA] 가위바위보  (0) 2022.08.12
[JAVA] 이미지 갤러리  (0) 2022.08.10