1

皆さん、今晩は;

私は JSVGCanvas (batik フレームワークのコンポーネント) を持っており、キャンバス上にリンク付きの svg ドキュメントを表示しています。リンクがクリックされたときに、swing で新しいウィンドウ (jframe) を開きたいと思います。したがって、linkActivated イベントを使用しています。しかし、私の問題は

private JPanel contentPane;
File f;
JSVGCanvas svgCanvas;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                trialgui frame = new trialgui();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public trialgui() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 452, 418);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);
    f = new  File("./links.svg");

    svgCanvas = new JSVGCanvas();

    if(f.exists()==true){System.out.println("file is ok");}
    try {

        svgCanvas.setURI(f.toURL().toString());

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    svgCanvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
    contentPane.add(svgCanvas, BorderLayout.CENTER);
    svgCanvas.setMySize(new Dimension(100,100));

    JButton btnNewButton = new JButton("New button");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                svgCanvas.setURI(f.toURL().toString());
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }
    });
    contentPane.add(btnNewButton, BorderLayout.NORTH);

    svgCanvas.addLinkActivationListener(new LinkActivationListener() {

        @Override
        public void linkActivated(LinkActivationEvent arg0) {
            System.out.println("here is working");

            try {

                JFrame gh = new JFrame();
                gh.setVisible(true);
                f = new  File("./links.svg");
                svgCanvas.setURI(f.toURL().toString());
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            System.out.println("here");
        }
    });
}

ユーザーがリンクをクリックすると、svgcanvasは同じキャンバス内にリンクを表示します。これを防ぐために、初期svg svgCanvas.setURI(f.toURL().toString());を設定します。リンクがアクティブ化されたときにトリガーされます。ただし、メソッドが機能していないため、参照リンクが同じキャンバスに表示されます。ボタンをクリックしてボタンイベントに同じメソッドを配置すると、最初のsvgがsvgcanvasに戻ります。

このイベントがボタンイベントとは異なる動作をする理由と、この問題を解決するにはどうすればよいですか?

よろしく....

4

0 に答える 0