2

Batik を使用して SVG マップ ファイルを変更して操作する必要がありますが、変更できません。私が苦労しているのは、国の塗りつぶしの値を変更することです(SVGファイルを解析した後、パス要素から取得できます)。このためには、どの国をクリックして他の識別子の ID を取得し、正しい塗りつぶしパラメーターを変更するかを把握する必要があります。

これが私のコードです:

public class SVGEditor{
    public File svgEditFile;
    public SVGDocument svgDoc;
    public JSVGCanvas svgCanvas;
    public SAXSVGDocumentFactory svgDocumentFactory;
    public Document doc;
    public Vector<String> colors = new Vector<String>();

    public SVGEditor(File f, JSVGCanvas canvas){
        svgEditFile = f;
        svgCanvas = canvas;
        svgCanvas.getInteractors().add(this);
    }

    public void editFile() throws IOException{
        String parser = XMLResourceDescriptor.getXMLParserClassName();
        svgDocumentFactory  = new SAXSVGDocumentFactory(parser);
        doc = svgDocumentFactory.createDocument(svgEditFile.toURI().toString());

    }
    public void pathParser(){
        doc.getDocumentElement().normalize();
        NodeList listOfPathNodes = doc.getElementsByTagName("path");
        int totalPaths = listOfPathNodes.getLength();
        System.out.println("Total number of paths: " + totalPaths); 
        for(int i = 0; i < totalPaths; i++){
            Element el = (Element) listOfPathNodes.item(i);
            EventTarget target = (EventTarget) el;
            target.addEventListener("click", 
                new org.w3c.dom.events.EventListener() {
                    public void handleEvent(org.w3c.dom.events.Event evt) {
                        if(evt.getType().equals("click")){
                            //Here is where I want to get the clicked path from the interaction with the DOM document
                            Element el  = (Element)evt.getTarget();
                            System.out.println("Clicked Path:" + el.getElementsByTagname("path");

                         }
                     }


                 }, false);
             // Get id data
             id = el.getAttribute("id");
             // Get path data
             String path = el.getAttribute("d");
             if(id.equals("ro"))
                 System.out.println(path);
             addPoint(path);

             // Get color data
             String style = el.getAttribute("style");
             int index1 = style.indexOf("fill:#");
             String color = style.substring((index1+5),(index1 + 12));
             colors.add((id + ":" +color));

         }
     }
 }

SVG ファイルは次のとおりです: http://upload.wikimedia.org/wikipedia/commons/b/b3/Blank_map_of_Europe.svgeditFile()で、このリンクをメソッド で直接使用できます。

私がやりたいことは、このソリューションまたは他のソリューションを使用して、クリックイベントを使用してドキュメントの塗りつぶしの値を変更する場所を見つけることであることを理解しやすいと思います.

4

3 に答える 3

0

クリックした国の ID を取得するには、mousedownイベント リスナーを登録する必要があります。(click私のバージョンのバティックでは動作しません)

クリックした国を知りたい場合:

@Override
public void handleEvent(Event e) {
    Element element = (Element) e.getCurrentTarget();

    String countryISO = element.getAttribute("id");
}
于 2013-01-09T10:57:26.013 に答える