package tr.gov.ulakbim.jDenetX.gui.clustertab; import tr.gov.ulakbim.jDenetX.evaluation.MeasureCollection; import javax.swing.*; import java.awt.*; import java.awt.event.ActionListener; import java.text.DecimalFormat; import java.util.ArrayList; /* * ClusteringEvalPanel.java * * Created on 20.03.2010, 11:19:30 */ /** * @author admin */ public class ClusteringVisualEvalPanel extends javax.swing.JPanel { private ArrayList<JLabel> names; private ArrayList<JLabel> values; private ArrayList<JRadioButton> radiobuttons; private MeasureCollection[] measures0; private MeasureCollection[] measures1; private ButtonGroup radioGroup; private JLabel labelDummy; private JLabel labelMeasure; private JLabel labelCurrent0; private JLabel labelMean0; /** * Creates new form ClusteringEvalPanel */ public ClusteringVisualEvalPanel() { initComponents(); radioGroup = new ButtonGroup(); } public void setMeasures(MeasureCollection[] measures0, MeasureCollection[] measures1, ActionListener listener) { this.measures0 = measures0; this.measures1 = measures1; names = new ArrayList<JLabel>(); values = new ArrayList<JLabel>(); radiobuttons = new ArrayList<JRadioButton>(); for (int i = 0; i < measures0.length; i++) { for (int j = 0; j < measures0[i].getNumMeasures(); j++) { if (measures0[i].isEnabled(j)) { names.add(new JLabel(measures0[i].getName(j))); } } } for (int i = 0; i < names.size() * 4; i++) { } setLayout(new java.awt.GridBagLayout()); GridBagConstraints gb; //Radiobuttons radioGroup = new ButtonGroup(); gb = new GridBagConstraints(); gb.gridx = 0; for (int i = 0; i < names.size(); i++) { JRadioButton rb = new JRadioButton(); rb.setActionCommand(Integer.toString(i)); rb.addActionListener(listener); radiobuttons.add(rb); gb.gridy = i + 1; contentPanel.add(rb, gb); radioGroup.add(rb); } radiobuttons.get(0).setSelected(true); //name labels gb = new GridBagConstraints(); gb.gridx = 1; for (int i = 0; i < names.size(); i++) { names.get(i).setPreferredSize(new Dimension(40, 14)); gb.anchor = GridBagConstraints.WEST; gb.insets = new java.awt.Insets(4, 7, 4, 7); gb.gridy = i + 1; contentPanel.add(names.get(i), gb); } int counter = 0; for (int i = 0; i < measures0.length; i++) { for (int j = 0; j < measures0[i].getNumMeasures(); j++) { if (!measures0[i].isEnabled(j)) continue; for (int k = 0; k < 4; k++) { String tooltip = ""; Color color = Color.black; switch (k) { case 0: tooltip = "current value"; color = Color.red; break; case 1: tooltip = "current value"; color = Color.blue; break; case 2: tooltip = "mean"; color = Color.black; break; case 3: tooltip = "mean"; color = Color.black; break; } JLabel l = new JLabel("-"); l.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); l.setPreferredSize(new java.awt.Dimension(50, 14)); l.setToolTipText(measures0[i].getName(j) + " " + tooltip); l.setForeground(color); values.add(l); gb = new GridBagConstraints(); gb.gridy = 1 + counter; gb.gridx = 2 + k; gb.weightx = 1.0; contentPanel.add(l, gb); } counter++; } } //dummy label to align the labels at the top gb = new GridBagConstraints(); gb.gridx = 0; gb.gridy = names.size() + 2; gb.gridwidth = 6; gb.weighty = 1.0; JLabel fill = new JLabel(); contentPanel.add(fill, gb); addLabels(); contentPanel.setPreferredSize(new Dimension(250, names.size() * (14 + 8) + 20)); } private void addLabels() { labelMeasure = new javax.swing.JLabel("Measure"); labelCurrent0 = new JLabel("Current"); labelMean0 = new javax.swing.JLabel("Mean"); labelDummy = new javax.swing.JLabel(); GridBagConstraints gb = new GridBagConstraints(); gb.gridy = 0; gb.gridx = 0; contentPanel.add(labelDummy, gb); gb.gridx = 1; contentPanel.add(labelMeasure, gb); gb = new GridBagConstraints(); gb.gridy = 0; gb.gridx = 2; gb.gridwidth = 2; contentPanel.add(labelCurrent0, gb); gb = new GridBagConstraints(); gb.gridy = 0; gb.gridx = 4; gb.gridwidth = 2; contentPanel.add(labelMean0, gb); } public void update() { DecimalFormat d = new DecimalFormat("0.00"); if (measures0 != null) { int counter = 0; for (MeasureCollection m : measures0) { for (int i = 0; i < m.getNumMeasures(); i++) { if (!m.isEnabled(i)) continue; if (Double.isNaN(m.getLastValue(i))) values.get(counter * 4).setText("-"); else values.get(counter * 4).setText(d.format(m.getLastValue(i))); if (Double.isNaN(m.getMean(i))) values.get(counter * 4 + 2).setText("-"); else values.get(counter * 4 + 2).setText(d.format(m.getMean(i))); counter++; } } } if (measures1 != null) { int counter = 0; for (MeasureCollection m : measures1) { for (int i = 0; i < m.getNumMeasures(); i++) { if (!m.isEnabled(i)) continue; if (Double.isNaN(m.getLastValue(i))) values.get(counter * 4 + 1).setText("-"); else values.get(counter * 4 + 1).setText(d.format(m.getLastValue(i))); if (Double.isNaN(m.getMean(i))) values.get(counter * 4 + 3).setText("-"); else values.get(counter * 4 + 3).setText(d.format(m.getMean(i))); counter++; } } } } @Override //this is soooooo bad, but freaking gridbag somehow doesnt kick in...??? protected void paintComponent(Graphics g) { scrollPane.setPreferredSize(new Dimension(getWidth() - 20, getHeight() - 30)); super.paintComponent(g); } /** * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; scrollPane = new javax.swing.JScrollPane(); contentPanel = new javax.swing.JPanel(); setBorder(javax.swing.BorderFactory.createTitledBorder("Values")); setPreferredSize(new java.awt.Dimension(250, 115)); setLayout(new java.awt.GridBagLayout()); scrollPane.setBorder(null); scrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); scrollPane.setPreferredSize(new java.awt.Dimension(270, 180)); contentPanel.setPreferredSize(new java.awt.Dimension(100, 105)); contentPanel.setLayout(new java.awt.GridBagLayout()); scrollPane.setViewportView(contentPanel); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; add(scrollPane, gridBagConstraints); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel contentPanel; private javax.swing.JScrollPane scrollPane; // End of variables declaration//GEN-END:variables }