2012-10-15 17 views
7

के साथ जंग रंगीन वर्टेक्स मैं जावा लाइब्रेरी जंग के साथ इस समय अटक गया हूं।मूल्य

मैं वर्टिसेस और किनारों को प्रदर्शित करता हूं, केवल मुझे वर्टेक्स रंग के लिए कोई फ़ंक्शन नहीं मिल रहा है जिसे मुझे शिखर के मान के साथ चाहिए और माउस के साथ नहीं।

import edu.uci.ics.jung.algorithms.layout.FRLayout; 
import edu.uci.ics.jung.algorithms.layout.Layout; 
import edu.uci.ics.jung.graph.Graph; 
import edu.uci.ics.jung.visualization.BasicVisualizationServer; 
import edu.uci.ics.jung.visualization.decorators.PickableVertexPaintTransformer; 
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller; 
import edu.uci.ics.jung.visualization.renderers.DefaultVertexLabelRenderer; 
import edu.uci.ics.jung.visualization.renderers.Renderer.VertexLabel.Position; 

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Dimension; 
import javax.swing.JFrame; 

import org.apache.commons.collections15.Transformer; 
import org.apache.commons.collections15.functors.ConstantTransformer; 

public class Design { 
    public Graph<String, Integer> g; 
    public Design() {  

     this.g = ProjectTools.readNet("SmallTown.net"); 
    } 

    public static <Paint> void main(String[] args) { 
     Design sgv = new Design(); 
     Layout<Integer, String> layout = new FRLayout(sgv.g); 
     layout.setSize(new Dimension(800,800)); 
     BasicVisualizationServer<Integer, String> vv = 
      new BasicVisualizationServer<Integer, String>(layout); 

     Transformer<Integer,Paint> vertexPaint = new Transformer<Integer,Paint>() { 
      public Paint transform(Integer i) { 
       return (Paint) Color.GREEN; 
      } 
     }; 

     vv.setPreferredSize(new Dimension(850,850)); 
     vv.getRenderContext().setVertexLabelRenderer(new DefaultVertexLabelRenderer(Color.green)); 
     vv.getRenderContext().setEdgeDrawPaintTransformer(new ConstantTransformer(Color.white)); 
     vv.getRenderContext().setEdgeStrokeTransformer(new ConstantTransformer(new BasicStroke(2.5f))); 

     vv.getRenderContext().setVertexFillPaintTransformer((Transformer<Integer, java.awt.Paint>) vertexPaint); 
     vv.getRenderContext().setVertexFillPaintTransformer(new PickableVertexPaintTransformer<Integer>(vv.getPickedVertexState(), Color.green, Color.yellow)); 

     vv.setBackground(Color.gray); 
     vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<Integer>()); 
     vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR); 


     JFrame frame = new JFrame("Projet Algo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(vv); 
     frame.pack(); 
     frame.setVisible(true);  
    } 
} 

मेरे प्रतिपादन: Vertices and edges

उत्तर

4

मैं दो संभावित समस्याओं देख सकते हैं; आप setVertexFillPaintTransformer को दो बार और BasicVisualizationServer पर कॉल कर रहे हैं DefaultModalGraphMouse जैसा प्रतीत नहीं होता है।

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Paint; 

import javax.swing.JFrame; 

import org.apache.commons.collections15.Transformer; 
import org.apache.commons.collections15.functors.ConstantTransformer; 

import edu.uci.ics.jung.algorithms.layout.FRLayout; 
import edu.uci.ics.jung.algorithms.layout.Layout; 
import edu.uci.ics.jung.graph.Graph; 
import edu.uci.ics.jung.visualization.VisualizationViewer; 
import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse; 
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller; 
import edu.uci.ics.jung.visualization.picking.PickedInfo; 
import edu.uci.ics.jung.visualization.renderers.DefaultVertexLabelRenderer; 
import edu.uci.ics.jung.visualization.renderers.Renderer.VertexLabel.Position; 

public class Design { 
    public Graph<Integer, String> g; 
    public Design() {  

     this.g = ProjectTools.readNet("SmallTown.net"); 
    } 

    private static class VertexPaintTransformer implements Transformer<Integer,Paint> { 

     private final PickedInfo<Integer> pi; 

     VertexPaintTransformer (PickedInfo<Integer> pi) { 
      super(); 
      if (pi == null) 
       throw new IllegalArgumentException("PickedInfo instance must be non-null"); 
      this.pi = pi; 
     } 

     @Override 
     public Paint transform(Integer i) { 
      Color p = null; 
      //Edit here to set the colours as reqired by your solution 
      if (i % 2 == 0) 
       p = Color.GREEN; 
      else 
       p = Color.RED; 
      //Remove if a selected colour is not required 
      if (pi.isPicked(i)){ 
       p = Color.yellow; 
      } 
      return p; 
     } 
    } 

    public static <Paint> void main(String[] args) { 
     Design sgv = new Design(); 
     Layout<Integer, String> layout = new FRLayout(sgv.g); 
     layout.setSize(new Dimension(800,800)); 
     VisualizationViewer<Integer, String> vv = new VisualizationViewer<Integer, String>(layout); 

     Transformer<Integer,Paint> vertexPaint = new Transformer<Integer,Paint>() { 

      @Override 
      public Paint transform(Integer i) { 
       if (i % 2 == 0) 
        return (Paint) Color.GREEN; 
       else 
        return (Paint) Color.RED; 
      } 
     }; 

     vv.setPreferredSize(new Dimension(850,850)); 
     vv.getRenderContext().setVertexLabelRenderer(new DefaultVertexLabelRenderer(Color.green)); 
     vv.getRenderContext().setEdgeDrawPaintTransformer(new ConstantTransformer(Color.white)); 
     vv.getRenderContext().setEdgeStrokeTransformer(new ConstantTransformer(new BasicStroke(2.5f))); 

     vv.getRenderContext().setVertexFillPaintTransformer(new VertexPaintTransformer(vv.getPickedVertexState())); 

     DefaultModalGraphMouse graphMouse = new DefaultModalGraphMouse(); 
     graphMouse.setMode(edu.uci.ics.jung.visualization.control.ModalGraphMouse.Mode.PICKING); 
     vv.setGraphMouse(graphMouse); 

     vv.setBackground(Color.gray); 
     vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller<Integer>()); 
     vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR); 


     JFrame frame = new JFrame("Projet Algo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(vv); 
     frame.pack(); 
     frame.setVisible(true);  
    } 
} 

अपने Transformer एक नया संस्करण VertexPaintTransformer कि चयन का समर्थन करता है, साथ setVertexFillPaintTransformer के दूसरे उपयोग हटा दिया और एक VisualizationViewer करने के लिए BasicVisualizationServer से आप swithced तो मैं उपयोग कर सकते हैं मैं repalced है:

इस संस्करण का प्रयास करें मैं था एक उठा GraphMouse

enter image description here

अपने ProjectTools#readNet() विधि को नकल करने के लिए, लेकिन आप अजीब, यहां तक ​​कि और चयनित रंग देख सकते हैं।

अब आप के रूप में आवश्यक

+0

अपने उत्तर के लिए धन्यवाद VertexPaintTransformer#transform() संशोधित कर सकते हैं, लेकिन अपने कोड मेरी विन्यास के लिए कार्य नहीं करता। मैं अंक रंग के लिए अपने माउस का उपयोग नहीं करना चाहता। मैं अपने कोड में सीधे रंग में अंक जोड़ना चाहता हूं। – Daleksek

+0

@Daleksek "मैं अपने माउस का उपयोग बिंदुओं को रंगने के लिए नहीं करना चाहता" लेकिन आप जहां 'पिकेबल वेरटेक्स पेंटट्रांसफॉर्मर' का उपयोग करते हैं, जिसका अर्थ है कि आप शिखर चुनना चाहते हैं। फिर भी आप माउस का उपयोग किए बिना 'VertexPaintTransformer # transform()' के कार्यान्वयन को अपनी आवश्यकताओं के अनुसार बदल सकते हैं। आप कोड का प्रयास क्यों करते हैं और देखते हैं कि यह क्या करता है, आपको वैकल्पिक हरे और लाल शिखर प्राप्त करना चाहिए। – GrahamA