📄 boundaryvisualizer.java
字号:
int classIndex = m_classAttBox.getSelectedIndex(); if (m_trainingInstances != null && m_classifier != null && (m_trainingInstances.attribute(classIndex).isNominal())) { m_startBut.setEnabled(true); plotTrainingData(); } } catch (Exception ex) { ex.printStackTrace(System.out); System.err.println("exception"); } } }); dataChooseHolder.add(chooseButton, BorderLayout.EAST); JPanel classifierHolder = new JPanel(); classifierHolder.setBorder(BorderFactory.createTitledBorder("Classifier")); classifierHolder.setLayout(new BorderLayout()); m_classifierEditor.setClassType(weka.classifiers.Classifier.class); m_classifierEditor.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { m_classifier = (Classifier)m_classifierEditor.getValue(); try { int classIndex = m_classAttBox.getSelectedIndex(); if (m_trainingInstances != null && m_classifier != null && (m_trainingInstances.attribute(classIndex).isNominal())) { m_startBut.setEnabled(true); } } catch (Exception ex) {}; } }); classifierHolder.add(m_ClassifierPanel, BorderLayout.CENTER); JPanel cHolder = new JPanel(); cHolder.setBorder(BorderFactory.createTitledBorder("Class Attribute")); cHolder.add(m_classAttBox); JPanel vAttHolder = new JPanel(); vAttHolder.setLayout(new GridLayout(2,1)); vAttHolder.setBorder(BorderFactory. createTitledBorder("Visualization Attributes")); vAttHolder.add(m_xAttBox); vAttHolder.add(m_yAttBox); JPanel colOne = new JPanel(); colOne.setLayout(new BorderLayout()); colOne.add(dataChooseHolder, BorderLayout.NORTH); //jimmy colOne.add(cHolder, BorderLayout.CENTER); //colOne.add(vAttHolder, BorderLayout.SOUTH); JPanel tempPanel = new JPanel(); tempPanel.setBorder(BorderFactory. createTitledBorder("Sampling control")); tempPanel.setLayout(new GridLayout(3,1)); JPanel colTwo = new JPanel(); colTwo.setLayout(new BorderLayout()); JPanel gsP = new JPanel(); gsP.setLayout(new BorderLayout()); gsP.add(new JLabel(" Base for sampling (r)"), BorderLayout.CENTER); gsP.add(m_generatorSamplesText, BorderLayout.WEST); tempPanel.add(gsP); JPanel rsP = new JPanel(); rsP.setLayout(new BorderLayout()); rsP.add(new JLabel(" Num. locations per pixel"), BorderLayout.CENTER); rsP.add(m_regionSamplesText, BorderLayout.WEST); tempPanel.add(rsP); JPanel ksP = new JPanel(); ksP.setLayout(new BorderLayout()); ksP.add(new JLabel(" Kernel bandwidth (k)"), BorderLayout.CENTER); ksP.add(m_kernelBandwidthText, BorderLayout.WEST); tempPanel.add(ksP); colTwo.add(classifierHolder,BorderLayout.NORTH);//jimmy //colTwo.add(tempPanel, BorderLayout.CENTER); colTwo.add(vAttHolder, BorderLayout.CENTER); JPanel startPanel = new JPanel(); startPanel.setBorder(BorderFactory. createTitledBorder("Plotting")); startPanel.setLayout(new BorderLayout()); startPanel.add(m_startBut, BorderLayout.CENTER); startPanel.add(m_plotTrainingData, BorderLayout.WEST); //colTwo.add(startPanel, BorderLayout.SOUTH); m_controlPanel.add(colOne, BorderLayout.WEST); m_controlPanel.add(colTwo, BorderLayout.CENTER); JPanel classHolder = new JPanel(); classHolder.setLayout(new BorderLayout()); //jimmy classHolder.setBorder(BorderFactory.createTitledBorder("Class color")); classHolder.add(m_classPanel, BorderLayout.CENTER); m_controlPanel.add(classHolder, BorderLayout.SOUTH); add(m_controlPanel, BorderLayout.NORTH); //classHolder.add(newWindowButton, BorderLayout.EAST); // set up the add-remove points widgets m_addRemovePointsPanel.setBorder(BorderFactory.createTitledBorder("Add / remove data points")); m_addRemovePointsPanel.setLayout(new GridBagLayout()); GridBagConstraints constraints = new GridBagConstraints(); constraints.weightx = 1.0; constraints.weighty = 1.0; constraints.gridx = 0; constraints.gridy = 0; constraints.fill = GridBagConstraints.BOTH; m_addRemovePointsPanel.add(m_addPointsButton); constraints.gridx = 1; m_addRemovePointsPanel.add(new JLabel("Add points"), constraints); constraints.gridx = 2; m_addRemovePointsPanel.add(classValueSelector); constraints.gridx = 0; constraints.gridy = 1; m_addRemovePointsPanel.add(m_removePointsButton, constraints); constraints.gridx = 1; m_addRemovePointsPanel.add(new JLabel("Remove points"),constraints); removeAllButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (m_trainingInstances != null) { if (m_startBut.getText().equals("Stop")) //we are plotting return; m_boundaryPanel.removeAllInstances(); computeBounds(); m_xAxisPanel.repaint(0,0,0,m_xAxisPanel.getWidth(), m_xAxisPanel.getHeight()); m_yAxisPanel.repaint(0,0,0,m_yAxisPanel.getWidth(), m_yAxisPanel.getHeight()); try {m_boundaryPanel.plotTrainingData(); } catch (Exception ex) {} } } }); constraints.gridx = 2; m_addRemovePointsPanel.add(removeAllButton, constraints); // m_addRemovePointsPanel.add(addPointsFrame, BorderLayout.NORTH);// m_addRemovePointsPanel.add(removePointsFrame, BorderLayout.CENTER); //m_addRemovePointsPanel.add(removeAllButton, BorderLayout.SOUTH); m_addRemovePointsButtonGroup.add(m_addPointsButton); m_addRemovePointsButtonGroup.add(m_removePointsButton); m_addPointsButton.setSelected(true); //classHolder.add(m_addRemovePointsPanel, BorderLayout.SOUTH); m_boundaryPanel = new BoundaryPanel(m_plotAreaWidth, m_plotAreaHeight); m_numberOfSamplesFromEachRegion = m_boundaryPanel.getNumSamplesPerRegion(); m_regionSamplesText.setText(""+m_numberOfSamplesFromEachRegion+" "); m_generatorSamplesBase = (int)m_boundaryPanel.getGeneratorSamplesBase(); m_generatorSamplesText.setText(""+m_generatorSamplesBase+" "); m_dataGenerator = new KDDataGenerator(); m_kernelBandwidth = m_dataGenerator.getKernelBandwidth(); m_kernelBandwidthText.setText(""+m_kernelBandwidth+" "); m_boundaryPanel.setDataGenerator(m_dataGenerator); JPanel gfxPanel = new JPanel(); gfxPanel.setLayout(new BorderLayout()); gfxPanel.setBorder(BorderFactory.createEtchedBorder()); //add(gfxPanel, BorderLayout.CENTER); // gfxPanel.add(m_addRemovePointsPanel, BorderLayout.NORTH); gfxPanel.add(m_boundaryPanel, BorderLayout.CENTER); m_xAxisPanel = new AxisPanel(false); gfxPanel.add(m_xAxisPanel, BorderLayout.SOUTH); m_yAxisPanel = new AxisPanel(true); gfxPanel.add(m_yAxisPanel, BorderLayout.WEST); JPanel containerPanel = new JPanel(); containerPanel.setLayout(new BorderLayout()); containerPanel.add(gfxPanel, BorderLayout.CENTER); add(containerPanel, BorderLayout.CENTER); JPanel rightHandToolsPanel = new JPanel(); //this panel contains the widgets to the right of the BoundaryPanel. rightHandToolsPanel.setLayout(new BoxLayout(rightHandToolsPanel, BoxLayout.PAGE_AXIS)); rightHandToolsPanel.add(m_addRemovePointsPanel); JButton newWindowButton = new JButton("Open a new window"); //the button for spawning a new window for the program. //newWindowButton.setMaximumSize(new Dimension(100, 100)); //newWindowButton.setPreferredSize(new Dimension(120, m_addRemovePointsPanel.getHeight())); newWindowButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { Instances newTrainingData = null; Classifier newClassifier = null; if (m_trainingInstances != null) newTrainingData = new Instances(m_trainingInstances); if (m_classifier != null) newClassifier = Classifier.makeCopy(m_classifier); createNewVisualizerWindow(newClassifier, newTrainingData); } catch (Exception ex) { ex.printStackTrace();} } }); JPanel newWindowHolder = new JPanel(); newWindowHolder.add(newWindowButton); rightHandToolsPanel.add(newWindowHolder); rightHandToolsPanel.add(tempPanel); rightHandToolsPanel.add(startPanel); containerPanel.add(rightHandToolsPanel, BorderLayout.EAST); /*add(m_boundaryPanel, BorderLayout.CENTER); m_xAxisPanel = new AxisPanel(false); add(m_xAxisPanel, BorderLayout.SOUTH); m_yAxisPanel = new AxisPanel(true); add(m_yAxisPanel, BorderLayout.WEST);*/ m_startBut.setEnabled(false); m_startBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (m_startBut.getText().equals("Start")) { if (m_trainingInstances != null && m_classifier != null) { try { int BPSuccessCode = setUpBoundaryPanel(); //set up the boundary panel, find out if it was successful or not. if (BPSuccessCode == 1) JOptionPane.showMessageDialog(null,"Error: Kernel Bandwidth can't be less than zero!"); else if (BPSuccessCode == 2) { JOptionPane.showMessageDialog(null,"Error: Kernel Bandwidth must be less than the number of training instances!"); } else { m_boundaryPanel.start(); m_startBut.setText("Stop"); setControlEnabledStatus(false); } } catch (Exception ex) { ex.printStackTrace(); } } } else { m_boundaryPanel.stopPlotting(); m_startBut.setText("Start"); setControlEnabledStatus(true); } } }); m_boundaryPanel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { m_startBut.setText("Start"); setControlEnabledStatus(true); } }); m_classPanel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { // save color vector to a file FastVector colors = m_boundaryPanel.getColors(); FileOutputStream fos = new FileOutputStream("colors.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(colors); oos.flush(); oos.close(); } catch (Exception ex) {} m_boundaryPanel.replot(); } }); //set up a mouse listener for the boundary panel. m_boundaryPanel.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) {// System.err.println("boundary panel mouseClick " + e.getX() + " " + e.getY()); if (m_trainingInstances != null) { if (m_startBut.getText().equals("Stop")) //we are plotting return; if (m_addPointsButton.isSelected()) {//we are in add mode double classVal = 0; boolean validInput = true; if (m_trainingInstances.attribute(m_classAttBox.getSelectedIndex()).isNominal()) //class is nominal classVal = (double)classValueSelector.getSelectedIndex(); else { String indexStr = ""; try { indexStr = (String)classValueSelector.getSelectedItem(); classVal = Double.parseDouble(indexStr); } catch (Exception ex) { if (indexStr == null) indexStr = ""; JOptionPane.showMessageDialog(null,"Error adding a point: \"" + indexStr + "\"" + " is not a valid class value."); validInput = false; } } //System.err.println("classVal is " + classVal); if (validInput) m_boundaryPanel.addTrainingInstanceFromMouseLocation(e.getX(), e.getY(), m_classAttBox.getSelectedIndex(), classVal); } else { //remove mode m_boundaryPanel.removeTrainingInstanceFromMouseLocation(e.getX(), e.getY()); } try{ plotTrainingData(); } catch (Exception ex) {} //jimmy m_xAxisPanel.repaint(0,0,0,m_xAxisPanel.getWidth(), m_xAxisPanel.getHeight()); m_yAxisPanel.repaint(0,0,0,m_yAxisPanel.getWidth(), m_yAxisPanel.getHeight()); } } }); } /** * Set the enabled status of the controls * * @param status a <code>boolean</code> value */ private void setControlEnabledStatus(boolean status) { m_classAttBox.setEnabled(status); m_xAttBox.setEnabled(status); m_yAttBox.setEnabled(status); m_regionSamplesText.setEnabled(status); m_generatorSamplesText.setEnabled(status); m_kernelBandwidthText.setEnabled(status); m_plotTrainingData.setEnabled(status); removeAllButton.setEnabled(status); classValueSelector.setEnabled(status); m_addPointsButton.setEnabled(status); m_removePointsButton.setEnabled(status); m_FileChooser.setEnabled(status); chooseButton.setEnabled(status); } /** * Set a classifier to use * * @param newClassifier the classifier to use * @exception Exception if an error occurs */ public void setClassifier(Classifier newClassifier) throws Exception { m_classifier = newClassifier; try { int classIndex = m_classAttBox.getSelectedIndex(); if ((m_classifier != null) && (m_trainingInstances != null) && (m_trainingInstances.attribute(classIndex).isNominal())) { m_startBut.setEnabled(true); } else m_startBut.setEnabled(false); } catch (Exception e) {} } /** Sets up the bounds on our x and y axes to fit the dataset. Also repaints the x and y axes. */ private void computeBounds() { m_boundaryPanel.computeMinMaxAtts(); //delegate to the BoundaryPanel String xName = (String)m_xAttBox.getSelectedItem(); if (xName == null) { return; } xName = Utils.removeSubstring(xName, "X: "); xName = Utils.removeSubstring(xName, " (Num)"); String yName = (String)m_yAttBox.getSelectedItem(); yName = Utils.removeSubstring(yName, "Y: "); yName = Utils.removeSubstring(yName, " (Num)"); m_xIndex = -1; m_yIndex = -1; for (int i = 0; i < m_trainingInstances.numAttributes(); i++) { if (m_trainingInstances.attribute(i).name().equals(xName)) { m_xIndex = i; } if (m_trainingInstances.attribute(i).name().equals(yName)) { m_yIndex = i; } } m_minX = m_boundaryPanel.getMinXBound(); m_minY = m_boundaryPanel.getMinYBound(); m_maxX = m_boundaryPanel.getMaxXBound(); m_maxY = m_boundaryPanel.getMaxYBound(); //System.err.println("setting bounds to " + m_minX + " " + m_minY + " " + m_maxX + " " + m_maxY); m_xAxisPanel.repaint(0,0,0,m_xAxisPanel.getWidth(), m_xAxisPanel.getHeight());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -