합이 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 |