import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
public class DataCollection {
private int currentNum;
private JPanel pie;
private JPanel jp;
private JPanel c = new JPanel();
private JComboBox box;
JTextField flag[];
private String[][] dataflag;
private String[][] defaultflag;
private int[][] data;
private int[] dataAnsNum;
private int QuestionNum;
private int AnsNum;
private GUI g;
DataCollection(GUI g, int n, int a) {
this.currentNum=0;
this.g = g;
this.QuestionNum = n;
this.AnsNum = a;
this.dataAnsNum = new int[n];
this.dataflag = new String[n][a];
data = new int[n][a];
this.defaultflag=new String[5][];
/*for(int i=0;i<5;i++){
String[] temp=new String[i+1];
this.defaultflag[i]=temp;
}*/
this.defaultflag[1]=new String[]{"1.是","2.否"};
this.defaultflag[2]=new String[]{"1.太快","2.適中","3.太慢"};
this.defaultflag[3]=new String[]{"1.非常滿意","2.很滿意","3.不滿意","4.非常不滿意"};
this.defaultflag[4]=new String[]{"1.非常滿意","2.很滿意","3.滿意","4.不滿意","5.非常不滿意"};
for (int i = 0; i < n; i++) {
this.dataAnsNum[i] = a;
for (int j = 0; j < a; j++) {
this.data[i][j] = 0;
//System.out.println(n+":"+this.data[i][j]);
if(a<=this.defaultflag.length){
//System.out.println(flag[i]);
this.dataflag[i][j]=this.defaultflag[a-1][j];
}else{
this.dataflag[i][j]=String.valueOf(j+1);
}
}
}
this.setCountrol();
}
public void addData(String s) {
char[] temp = s.toCharArray();
if (temp.length > this.QuestionNum) {
JOptionPane.showMessageDialog(
g,
"( ´_ゝ`):「你多打了"
+ Integer.valueOf(temp.length - this.QuestionNum)
+ "個答案……(嘆氣)」", "你手.殘.了", JOptionPane.ERROR_MESSAGE);
} else if (temp.length < this.QuestionNum) {
JOptionPane.showMessageDialog(
g,
"( ´_ゝ`):「你打少了"
+ Integer.valueOf(this.QuestionNum - temp.length)
+ "個答案……(嘆氣)」", "你手.殘.了", JOptionPane.ERROR_MESSAGE);
} else {
boolean chack = true;
for (int i = 0; i < this.QuestionNum; i++) {
if (Integer.valueOf(new Character(temp[i]).toString())< 1
|| Integer.valueOf(new Character(temp[i]).toString()) > this.dataAnsNum[i]) {
chack = false;
JOptionPane.showMessageDialog(g, "(#°Д°)σ:「你第" +
String.valueOf(i+1) +
"題打成"+temp[i]+"了!!!」", "你手.殘.了",
JOptionPane.ERROR_MESSAGE);
break;
}
}
if (chack) {
for (int i = 0; i < this.QuestionNum; i++) {
this.data[i][Integer.valueOf(new Character(temp[i])
.toString()) - 1]++;
}
}
}
// this.showData();
}
public JPanel getPie() {
DefaultPieDataset dataset = new DefaultPieDataset();
for (int i = 0; i < this.dataAnsNum[this.currentNum]; i++) {
//System.out.println(this.currentNum);
dataset.setValue(this.dataflag[this.currentNum][i], this.data[this.currentNum][i]);
}
JFreeChart chart = ChartFactory.createPieChart3D(null, dataset, // data
true, // include legend
true, true);
// chart.getTitle().setFont(new Font("新細明體", Font.BOLD, 20));
chart.getLegend().setItemFont(new Font("微軟正黑體", Font.PLAIN, 15));
PiePlot3D pieplot3d = (PiePlot3D) chart.getPlot();
pieplot3d.setLabelFont(new Font("微軟正黑體", Font.PLAIN, 12));
pieplot3d.setLabelGenerator(new StandardPieSectionLabelGenerator( "{0}--{2}"));
ChartPanel cp = new ChartPanel(chart);
cp.setPreferredSize(new java.awt.Dimension(600, 300));
return cp;
}
public JPanel getOption(){
JPanel option=new JPanel();
flag=new JTextField[this.dataAnsNum[this.currentNum]];
for(int i=0;i<this.dataAnsNum[this.currentNum];i++){
flag[i]=new JTextField(this.dataflag[this.currentNum][i],8);
option.add(flag[i]);
flag[i].addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER){
for(int i=0;i<flag.length;i++){
//System.out.println(flag.length);
dataflag[currentNum][i]=flag[i].getText();
}
pie.removeAll();
pie.add(getPie());
pie.updateUI();
}
}
});
}
return option;
}
public void setCountrol() {
jp = new JPanel();
this.pie=new JPanel();
this.pie.removeAll();
jp.removeAll();
c.removeAll();
String[] list = new String[this.AnsNum-1];
for (int i = 1; i < this.AnsNum; i++) {
list[i-1] = String.valueOf(i + 1);
}
this.box = new JComboBox(list);
this.box.setSelectedIndex(this.dataAnsNum[this.currentNum]-2);
this.box.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
dataAnsNum[currentNum] = box.getSelectedIndex() + 2;
for(int i=0;i<dataAnsNum[currentNum];i++){
//System.out.println(defaultflag[dataAnsNum[currentNum]-1][i]);
dataflag[currentNum][i]=defaultflag[dataAnsNum[currentNum]-1][i];
}
pie.removeAll();
pie.add(getPie());
pie.updateUI();
jp.removeAll();
jp.add(c, BorderLayout.SOUTH);
jp.add(getOption(),BorderLayout.CENTER);
jp.add(pie, BorderLayout.NORTH);
jp.updateUI();
}
});
c.add(new JLabel("這題共有"));
c.add(this.box);
c.add(new JLabel("個選項"));
pie.add(this.getPie());
jp.setLayout(new BorderLayout());
jp.add(c, BorderLayout.SOUTH);
jp.add(getOption(),BorderLayout.CENTER);
jp.add(pie, BorderLayout.NORTH);
}
public JPanel showData(int n) {
this.currentNum=n;
this.setCountrol();
jp.updateUI();
return jp;
}
public String getData(){
String d=new String();
for(int i=0;i<this.QuestionNum;i++){
d+="Q" +String.valueOf(i+1)+": ";
for(int j=0;j<this.dataAnsNum[i];j++){
d+=this.data[i][j]+",";
}
d+="\n";
}
d+="選項1→"+this.AnsNum;
return d;
}
public void showData() {
for (int i = 0; i < this.QuestionNum; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(this.data[i][j]+1 + ",");
}
System.out.print("\n");
}
System.out.println("next>");
}
}