2016-03-04 50 views
2

我有一個封閉源代碼的第三方應用程序的窗戶我想從我的Java程序中控制。我設法運行第三方應用程序的主要方法,並攔截使用AWTEventListener實例生成的窗口事件。然後,我遍歷它生成的窗口組件,以便找到並操作必要的擺動控制。查找組件,點擊按鈕,激活切換按鈕和修改文本字段可以正常工作,但是在JTextPane中有一個超鏈接,我無法以編程方式觸發,也沒有找到任何有關如何成功完成它的信息。建議herehere看起來很有希望,但我無法觸發與MouseEvent的超鏈接。我還應該指出,超鏈接不是指向一個URL,而是指向一個內部函數。當我調用的JTextPane的getText()方法,我得到:如何到達/觸發一個JEditorPane/JTextPane的內部超鏈接的目標編程

<html> 
    <head> 

    </head> 
    <body> 
    <a href="#action">Expand Window</a> 
    </body> 
</html> 

我的問題:是否有一種方法可以直接到達的JTextPane內的超鏈接的目標(在這種情況下,擴大窗口)作爲反對嘗試讓MouseEvent模擬點擊它?

回答

2

我不知道,但可能這個例子會幫助你。

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.util.Collection; 
import java.util.LinkedHashSet; 

import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTextPane; 
import javax.swing.WindowConstants; 
import javax.swing.text.AttributeSet; 
import javax.swing.text.Element; 
import javax.swing.text.html.HTML; 
import javax.swing.text.html.HTMLDocument; 


public class TextPaneTest { 


    public static void main(String[] args) { 
     final JFrame frm = new JFrame("Editor pane test"); 

     final JTextPane pane = new JTextPane(); 
     pane.setContentType("text/html"); 
     pane.setText("<html>Here is the text with a <a href=\"http://google.com\">link</a></html>"); 
     frm.add(new JScrollPane(pane)); 
     final JButton btn = new JButton(new AbstractAction("Find link") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       final HTMLDocument doc = (HTMLDocument) pane.getDocument(); 
       final Collection<String> links = new LinkedHashSet<String>(); 
       // probably exists a better way to iterate over elements 
       for (int i = 0; i < doc.getLength(); i++) { 
        final Element el = doc.getCharacterElement(i); 
        final AttributeSet a = el.getAttributes(); 
        final AttributeSet anchor = (AttributeSet)a.getAttribute(HTML.Tag.A); 
        if (anchor != null) { 
         links.add((String)anchor.getAttribute(HTML.Attribute.HREF)); 
        } 
       } 
       System.out.println("Links found: " + links); 
      } 
     }); 
     frm.add(btn, BorderLayout.EAST); 
     frm.pack(); 
     frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frm.setVisible(true); 
    } 

} 
+0

謝謝@Sergiy的回覆。你的例子類似於推薦的[這裏](http://stackoverflow.com/questions/1506679/how-to-trigger-a-hyperlink-using-a-keystroke-in-a-swing-jeditorpane)。我能夠迭代元素並找到我需要的鏈接。我的問題是該鏈接不指向一個URL。相反,它指向另一個程序的方法,其代碼我無權訪問(#action)。這就是爲什麼我想知道如果我可以使用您的示例中找到的鏈接以編程方式從我的Java程序觸發它。 – lolero