Как показать URL как кликабельные в JEditorpane и разрешить их открывать в браузере по умолчанию? - PullRequest
0 голосов
/ 27 января 2012

У меня есть приложение Java Desktop, которое отображает некоторую информацию в JTable, который содержит URL + text в каждой ячейке. Поскольку у меня возникают трудности с показом и открытием URL в ячейке , поэтому я планирую показать содержимое ячейки в JEditorpane. Пользователь может открыть содержимое ячейки в JEditorpane, где пользователь может легко просматривать и редактировать содержимое.

Опять же, как я могу сделать только URL доступным для кликов и разрешить пользователю открывать URL в браузере по умолчанию в JEditorpane.

Обратите внимание:

  1. JEditorpane будет содержать как текст, так и URL-адрес, поэтому мне нужно, чтобы URL-адрес был доступен только для кликов.
  2. JEditorpane доступен для редактирования. Пользователь может редактировать контент.

Ответы [ 4 ]

10 голосов
/ 27 января 2012
  1. Реализация HyperlinkListener. НАПРИМЕР. в JavaDocs для JEditorPane.
  2. Убедитесь, что JEP отображает HTML, имеет тип содержимого text/html и недоступен для редактирования.
  3. По событию, Desktop.browse(URI) на URL.
8 голосов
/ 27 января 2012

Андрей ответ правильный.Ссылки в редактируемой подсказке JEditorPane доступны по адресу Обработка гиперссылок в редактируемом JEditorPane с помощью HTMLEditorKit .

5 голосов
/ 27 января 2012

Возможно, вы захотите использовать JXTable и JXHyperlink (оба в проекте SwingX ) - они поддерживают гиперссылки в рендере, вместе с HyperlinkAction, поддерживаемым Desktop (класс, упомянутый @Andrew Thompson)

забыл упомянуть, что соответствующий рендерер по умолчанию установлен для класса URI, фрагмента кода, который запускает соответствующее действие DeskTop из коробки, щелкая в ячейке, содержащей URI:

    // quick model which returns URI class
    DefaultTableModel model = new DefaultTableModel(0, 1) {

        @Override
        public boolean isCellEditable(int row, int column) {
            return false;
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            return URI.class;
        }

    };
    // fill with supported uri types 
    model.addRow(new Object[]{new URI("mailto:contributor@java.net")});
    model.addRow(new Object[] {new URI("http://swingx.java.net")});
    model.addRow(new Object[] {new URI("/5423031/kak-pokazat-url-kak-klikabelnye-v-jeditorpane-i-razreshit-ih-otkryvat-v-brauzere-po-umolchaniy")});
    model.addRow(new Object[] {new URI("http://dummy.org")});
    // use in JXTable
    JXTable table = new JXTable(model);
    // that's it :-)

Приложение

упустил из виду ваше требование url + text - при поддержке swingx по умолчанию, вся ячейка кликабельна, а не только строковое представление URL

0 голосов
/ 31 января 2017
    jep = new javax.swing.JEditorPane();
    jep.setEditable(false);
    jep.setContentType("text/html");
    jep.addHyperlinkListener(new BrowserOpener());

    class BrowserOpener implements HyperlinkListener {    
        @Override
        public void hyperlinkUpdate(HyperlinkEvent event) {
            if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                try {
                    Desktop.getDesktop().browse(event.getURL().toURI());
                } catch (IOException | URISyntaxException ex) {
                    // TODO 
                }
            }
        }
    }
...