Java tutorial
/* Copyright (c) 2010, Johannes Kster <johannes.koester@tu-dortmund.de> * All rights reserved. * * This software is open-source under the BSD license; see "license.txt" * for a description. */ /* * JungProteinNetworkVisualization.java * * Created on 28.07.2010, 16:27:53 */ package proteinHypernetworkVisualization.implementation.jung.visualization; import edu.uci.ics.jung.algorithms.layout.BalloonLayout; import edu.uci.ics.jung.algorithms.layout.Layout; import edu.uci.ics.jung.graph.Graph; import edu.uci.ics.jung.visualization.GraphZoomScrollPane; import edu.uci.ics.jung.visualization.VisualizationViewer; import edu.uci.ics.jung.visualization.control.CrossoverScalingControl; import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse; import edu.uci.ics.jung.visualization.control.ModalGraphMouse.Mode; import edu.uci.ics.jung.visualization.control.ScalingControl; import java.awt.Color; import java.awt.Dimension; import java.awt.Paint; import java.util.HashSet; import javax.swing.JOptionPane; import org.apache.commons.collections15.CollectionUtils; import org.apache.commons.collections15.Transformer; import org.apache.xmlrpc.XmlRpcException; import proteinHypernetwork.NetworkEntity; import proteinHypernetwork.ProteinHypernetwork; import proteinHypernetwork.interactions.Interaction; import proteinHypernetwork.proteins.Protein; import proteinHypernetworkVisualization.implementation.jung.graphs.JungProteinNetworkGraph; import proteinHypernetworkVisualization.visualization.CytoscapeVisualization; /** * * @author Johannes Kster <johannes.koester@tu-dortmund.de> */ public class JungProteinNetworkVisualization extends javax.swing.JPanel { private Dimension size = new Dimension(300, 300); private DefaultModalGraphMouse<Protein, Interaction> graphMouse = new DefaultModalGraphMouse<Protein, Interaction>(); private VisualizationViewer<Protein, Interaction> vv; private Graph<Protein, Interaction> currentGraph; /** Creates new form JungProteinNetworkVisualization */ public JungProteinNetworkVisualization() { initComponents(); moveZoomButton.setSelected(true); } public void setVisualizationSize(Dimension d) { size = d; } public void setProteinNetwork(ProteinHypernetwork hypernetwork) { JungProteinNetworkGraph g = new JungProteinNetworkGraph(); g.setProteinNetwork(hypernetwork, hypernetwork.getProteins()); currentGraph = g; //FRLayout<Protein, Interaction> layout = new FRLayout<Protein, Interaction>(g); //layout.setMaxIterations(10); BalloonLayout.DEFAULT_DISTX = 300; BalloonLayout.DEFAULT_DISTY = 300; Layout<Protein, Interaction> layout = new BalloonHubLayout<Protein, Interaction>(g); layout.setSize(size); vv = new VisualizationViewer<Protein, Interaction>(layout, size); vv.setDoubleBuffered(true); final ScalingControl scaler = new CrossoverScalingControl(); vv.scaleToLayout(scaler); /*int i = 0; while(!layout.done()) { layout.step(); i++; System.out.println(i); }*/ new DefaultGraphStyle().setGraphStyle(vv, true); vv.setGraphMouse(graphMouse); graph.add(new GraphZoomScrollPane(vv)); } public void resetHighlighting() { new DefaultGraphStyle().setGraphStyle(vv, true); } public void highlightNetworkEntities(final HashSet<NetworkEntity> networkEntities) { final Transformer<Protein, Paint> vft = vv.getRenderContext().getVertexFillPaintTransformer(); vv.getRenderContext().setVertexFillPaintTransformer(new Transformer<Protein, Paint>() { public Paint transform(Protein p) { if (networkEntities.contains(p) || CollectionUtils.containsAny(networkEntities, vv.getGraphLayout().getGraph().getIncidentEdges(p))) { return Color.WHITE; } return vft.transform(p); } }); /*final Transformer<Interaction, Paint> edt = vv.getRenderContext().getEdgeDrawPaintTransformer(); vv.getRenderContext().setEdgeDrawPaintTransformer(new Transformer<Interaction, Paint>() { public Paint transform(Interaction i) { if(networkEntities.contains(i)) return Color.WHITE; return edt.transform(i); } });*/ } /** 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; mouseMode = new javax.swing.ButtonGroup(); graph = new javax.swing.JPanel(); controls = new javax.swing.JPanel(); labelVertices = new javax.swing.JToggleButton(); moveZoomButton = new javax.swing.JToggleButton(); selectButton = new javax.swing.JToggleButton(); showCytoscape = new javax.swing.JButton(); setLayout(new java.awt.GridBagLayout()); graph.setLayout(new java.awt.GridLayout(1, 0)); 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(graph, gridBagConstraints); controls.setLayout(new java.awt.GridBagLayout()); labelVertices.setText("Label vertices"); labelVertices.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { labelVerticesActionPerformed(evt); } }); controls.add(labelVertices, new java.awt.GridBagConstraints()); mouseMode.add(moveZoomButton); moveZoomButton.setText("Move and Zoom"); moveZoomButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { moveZoomButtonActionPerformed(evt); } }); controls.add(moveZoomButton, new java.awt.GridBagConstraints()); mouseMode.add(selectButton); selectButton.setText("Drag Vertices"); selectButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { selectButtonActionPerformed(evt); } }); controls.add(selectButton, new java.awt.GridBagConstraints()); showCytoscape.setText("Show in Cytoscape"); showCytoscape.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { showCytoscapeActionPerformed(evt); } }); controls.add(showCytoscape, new java.awt.GridBagConstraints()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; add(controls, gridBagConstraints); }// </editor-fold>//GEN-END:initComponents private void moveZoomButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_moveZoomButtonActionPerformed graphMouse.setMode(Mode.TRANSFORMING); }//GEN-LAST:event_moveZoomButtonActionPerformed private void selectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectButtonActionPerformed graphMouse.setMode(Mode.PICKING); }//GEN-LAST:event_selectButtonActionPerformed private void labelVerticesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_labelVerticesActionPerformed new DefaultGraphStyle().labelVertices(vv, labelVertices.isSelected()); vv.repaint(); }//GEN-LAST:event_labelVerticesActionPerformed private void showCytoscapeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showCytoscapeActionPerformed try { new CytoscapeVisualization(currentGraph).visualize(); } catch (XmlRpcException ex) { String message = ex.getMessage(); message += "Is Cytoscape with CytoscapeRPC plugin running?"; JOptionPane.showMessageDialog(null, message); } }//GEN-LAST:event_showCytoscapeActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel controls; private javax.swing.JPanel graph; private javax.swing.JToggleButton labelVertices; private javax.swing.ButtonGroup mouseMode; private javax.swing.JToggleButton moveZoomButton; private javax.swing.JToggleButton selectButton; private javax.swing.JButton showCytoscape; // End of variables declaration//GEN-END:variables }