2015-03-13 3 views
0

Здравствуйте, поэтому у меня есть jTextPane, в которую я вставляю как обычный, так и подчеркнутый текст. То, что я пытаюсь сделать, - это когда я нажимаю гиперссылку на jTextPane, чтобы получить значение строки гиперссылки. У вас есть идеи, как это сделать? Спасибо! Мне нужно это для чата. Когда кто-то загружает файл, он вставляет в текстовую область следующее: загруженный пользователем файл file.txt (как гиперссылка). Я просто должен уметь захватить значение строки гиперссылки, когда я нажимаю на нее.Получить значение jTextPane Hyperlink

+1

Посмотрите на [этого метода] (https: // docs.oracle.com/javase/8/docs/api/javax/swing/JEditorPane.html#addHyperlinkListener-javax.swing.event.HyperlinkListener-) в классе 'JEditorPane' (суперкласс« JTextPane') –

ответ

0

Вот действительно быстрый пример этого в действии:

public class Test { 
    private JFrame frame; 

    public Test() { 
     // make frame 
     frame = new JFrame("JTextPane test"); 
     frame.setSize(200,100); 

     // create text pane 
     JTextPane textPane = new JTextPane(); 

     // set up for HTML 
     textPane.setEditorKit(JEditorPane.createEditorKitForContentType("text/html")); 
     // url of file 
     String url = "file://path/to/somefile.txt"; 
     // disable editing 
     textPane.setEditable(false); 

     // put a hyperlink in the pane 
     textPane.setText("<a href='" + url + "'>somefile.txt</a>"); 

     // add link listener 
     textPane.addHyperlinkListener(new HyperlinkListener() { 
      @Override 
      public void hyperlinkUpdate(HyperlinkEvent e) { 
       if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { 
        // if clicked, show the URL 
        JOptionPane.showMessageDialog(null, e.getURL(), "Link clicked!", JOptionPane.INFORMATION_MESSAGE); 
       } 
      } 
     }); 

     // add content 
     frame.getContentPane().add(textPane); 

     frame.setVisible(true); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    } 

    // run 
    public static void main(String[] args) { 
     Test t = new Test(); 
    } 
} 

Ниже приведен скриншот выхода:

enter image description here

+0

Спасибо, но Я уже пробовал другой подход. Можно ли захватить значение String из переменной элемента ?: Element elem = jTextPane2.getStyledDocument(). GetCharacterElement (jTextPane2.viewToModel (e.getPoint())); AttributeSet as = elem.getAttributes(); URLAction fla = (URLActionL) as.getAttribute (HYPERLINK_ATTRIBUTE); – Niemand23

+0

Я не совсем уверен, зачем вы это делаете ... –

+0

Да, я знаю. У меня есть другой вопрос. Почему это не работает с использованием метода insertString()? Я хочу добавлять тексты, не заменяя все каждый раз, используя setText(), это то, что я соблюдал: https://community.oracle.com/thread/2089990 – Niemand23