package org.infosec.ismp.applet.manager.component.panel.info.file; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.List; import javax.swing.JPanel; import javax.swing.JTabbedPane; import org.infosec.ismp.applet.manager.component.panel.component.TitlePanel; import org.infosec.ismp.applet.manager.component.panel.info.AbstractTitlePanel; import org.infosec.ismp.applet.manager.component.panel.utils.ImageToolTipTabbedPanel; import twaver.Node; import twaver.TDataBox; import twaver.TWaverConst; import twaver.TWaverUtil; import twaver.chart.BarChart; import twaver.chart.PieChart; /** * 文件系统面板 * 接口 * setFileList * addFile * clearFiles */ public class FilePanel extends AbstractTitlePanel { private List fileList = new ArrayList(); private JPanel piePanel = new JPanel(); private JPanel barPanel = new JPanel(); private FileBarChart chart = new FileBarChart(); public FilePanel() { initGUI(); } private void initGUI() { JTabbedPane pane = new ImageToolTipTabbedPanel(); pane.addTab("饼图", piePanel); pane.addTab("柱状图", barPanel); this.setLayout(new BorderLayout()); this.add(pane, BorderLayout.CENTER); setPanel(); } private void setPanel() { setPiePanel(); setBarChart(); this.validate(); this.repaint(); } private void setPiePanel() { int size = fileList.size(); piePanel.removeAll(); piePanel.setLayout(new GridLayout(1, size, 5, 5)); for (int i = 0; i < size; i++) { FileElement element = (FileElement) fileList.get(i); FilePieChart chart = new FilePieChart(element); piePanel.add(chart); } } private void setBarChart() { chart = new FileBarChart(); barPanel.removeAll(); barPanel.setLayout(new BorderLayout()); barPanel.add(chart); barPanel.validate(); barPanel.repaint(); } public JPanel getTitlePanel() { return new TitlePanel("文件系统", this); } /** * 设置文件系统列表,list中的每个类型都是是FileElement,对应于一个piechart和barchart的一个轴。 * * @param fileList */ public void setFileList(List fileList) { this.fileList = fileList; if (fileList == null) { this.fileList = new ArrayList(); } setPanel(); } /** * 添加一个文件信息。 * * @param element */ public void addFile(FileElement element) { if (fileList.contains(element)) { return; } fileList.add(element); FilePieChart pie = new FilePieChart(element); piePanel.add(pie); piePanel.validate(); piePanel.repaint(); setBarChart(); } /** * 清除所有文件系统信息。 */ public void clearFiles() { this.fileList = new ArrayList(); setPanel(); } /** * 文件系统,柱状图 */ class FileBarChart extends JPanel { private TDataBox box = new TDataBox(); private BarChart chart = new BarChart(box); private Node usedNode = new Node(); private Node unUsedNode = new Node(); public FileBarChart() { initGUI(); final int size = fileList.size(); for (int i = 0; i < size; i++) { FileElement element = (FileElement) fileList.get(i); element.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if ((FileElement.FILEPREFIX + FileElement.FILEUNUSED).equals(TWaverUtil.getPropertyName(evt))) { setBarValues(); } else if ((FileElement.FILEPREFIX + FileElement.FILEUSED).equals(TWaverUtil.getPropertyName(evt))) { setBarValues(); } else if (TWaverConst.PROPERTYNAME_NAME.equals(evt.getPropertyName())) { setBarValues(); } } }); } setBarValues(); } public void setBarValues() { int size = fileList.size(); List xscaleList = new ArrayList(); usedNode.clearChartValues(); unUsedNode.clearChartValues(); for (int i = 0; i < size; i++) { FileElement element = (FileElement) fileList.get(i); xscaleList.add(element.getName()); usedNode.addChartValue(element.getUsedFile()); unUsedNode.addChartValue(element.getUnUsedFile()); } chart.setXScaleTextList(xscaleList); } private void initGUI() { usedNode.setName("已用"); unUsedNode.setName("未用"); usedNode.putChartColor(Color.RED); unUsedNode.putChartColor(Color.GREEN.darker()); box.addElement(usedNode); box.addElement(unUsedNode); chart.setOpaque(false); chart.setBarType(TWaverConst.BAR_TYPE_PERCENT); chart.setBackgroundGradient(true); chart.setBackgroundVisible(true); chart.setValueTextCenter(true); this.setLayout(new BorderLayout()); this.add(chart); } } } /** * 文件系统,饼图 */ class FilePieChart extends JPanel { private TDataBox box = new TDataBox(); private PieChart chart = new PieChart(box); private FileElement element; private Node usedNode = new Node(); private Node unUsedNode = new Node(); public FilePieChart(FileElement element) { this.element = element; initData(); initGUI(); /** * 如有数据变化,更新到当前piechart */ this.element.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (TWaverUtil.getPropertyName(evt).equals(FileElement.FILEPREFIX + FileElement.FILEUNUSED)) { Double unUsed = (Double) evt.getNewValue(); unUsedNode.putChartValue(unUsed.doubleValue()); unUsedNode.setName("未用("+unUsed+")"); } else if (TWaverUtil.getPropertyName(evt).equals(FileElement.FILEPREFIX + FileElement.FILEUSED)) { Double used = (Double) evt.getNewValue(); usedNode.putChartValue(used.doubleValue()); usedNode.setName("已用("+used+")"); } } }); } private void initData() { // usedNode.setName("已用"); // unUsedNode.setName("未用"); unUsedNode.setName("未用("+element.getUnUsedFile()+")"); usedNode.setName("已用("+element.getUsedFile()+")"); usedNode.putChartColor(Color.RED); usedNode.putChartValue(element.getUsedFile()); unUsedNode.putChartColor(Color.GREEN.darker()); unUsedNode.putChartValue(element.getUnUsedFile()); box.addElement(usedNode); box.addElement(unUsedNode); } private void initGUI() { chart.set3D(true); chart.setTitle(element.getName()); chart.setValueTextPercent(true); this.setLayout(new BorderLayout()); this.add(chart); } }