Здравствуйте, поэтому у меня есть jTextPane, в которую я вставляю как обычный, так и подчеркнутый текст. То, что я пытаюсь сделать, - это когда я нажимаю гиперссылку на jTextPane, чтобы получить значение строки гиперссылки. У вас есть идеи, как это сделать? Спасибо! Мне нужно это для чата. Когда кто-то загружает файл, он вставляет в текстовую область следующее: загруженный пользователем файл file.txt (как гиперссылка). Я просто должен уметь захватить значение строки гиперссылки, когда я нажимаю на нее.Получить значение jTextPane Hyperlink
ответ
Вот действительно быстрый пример этого в действии:
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();
}
}
Ниже приведен скриншот выхода:
Спасибо, но Я уже пробовал другой подход. Можно ли захватить значение String из переменной элемента ?: Element elem = jTextPane2.getStyledDocument(). GetCharacterElement (jTextPane2.viewToModel (e.getPoint())); AttributeSet as = elem.getAttributes(); URLAction fla = (URLActionL) as.getAttribute (HYPERLINK_ATTRIBUTE); – Niemand23
Я не совсем уверен, зачем вы это делаете ... –
Да, я знаю. У меня есть другой вопрос. Почему это не работает с использованием метода insertString()? Я хочу добавлять тексты, не заменяя все каждый раз, используя setText(), это то, что я соблюдал: https://community.oracle.com/thread/2089990 – Niemand23
Посмотрите на [этого метода] (https: // docs.oracle.com/javase/8/docs/api/javax/swing/JEditorPane.html#addHyperlinkListener-javax.swing.event.HyperlinkListener-) в классе 'JEditorPane' (суперкласс« JTextPane') –