2016-08-04 3 views
0

У меня есть JEditorPane, показывающая на JOptionPane, с URL-адресом, который я хочу открыть перед закрытием моего приложения. Он отлично работает в Windows и Linux, но он не работает на Mac.Гиперссылка в JEditorPane не открывается на MAC

Вот код:

//LINK 
String link = "http://www.google.com/"; 
String link_name = "Google"; 

//Editor_Pane 
JEditorPane editor_pane = new JEditorPane(); 
editor_pane.setEditorKit(JEditorPane.createEditorKitForContentType("text/html")); 
editor_pane.setText(/*some text*/ + "<a href=\"" + link + "\">" + link_name + "</a>"); 
editor_pane.setEditable(false); 

//ADD A LISTENER 
editor_pane.addHyperlinkListener(new HyperlinkListener(){ 
    public void hyperlinkUpdate(HyperlinkEvent e){ 
     if(e.getEventType() == (HyperlinkEvent.EventType.ACTIVATED)){ 

      //OPEN THE LINK 
      try{ Desktop.getDesktop().browse(e.getURL().toURI()); 
      }catch (IOException | URISyntaxException e1) {e1.printStackTrace();} 

      //EXIT 
      System.exit(0); 
     } 
    } 
}); 

//SHOW THE PANE 
JOptionPane.showOptionDialog(null, editor_pane, "text", JOptionPane.DEFAULT_OPTION, 
          JOptionPane.PLAIN_MESSAGE, null, new Object[] {}, null); 

Ссылка кажется интерактивной, но ничего не происходит, когда я нажимаю, даже если я пытаюсь удалить метод Desktop.browse и пусть только метод exit.

Что я делаю неправильно? Благодаря !

+0

Для лучшей помощи раньше, оставить [MCVE] или [Короткий, самодостаточный Правильный пример] (http://www.sscce.org/). –

ответ

4

Попробуйте добавить:

editor_pane.setEditable(false); 

Панель должна быть только для чтения для ссылки, чтобы быть интерактивными. См JEditorPane для более подробной информации:

HTML-EditorKit будет генерировать гиперссылки события, если JEditorPane не редактируется (JEditorPane.setEditable (ложь), было названо).

РЕДАКТИРОВАТЬ:

import java.awt.Cursor; 
import java.awt.Desktop; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.net.URI; 

import javax.swing.JLabel; 
import javax.swing.JOptionPane; 

public class TestLink { 

    public static void main(String[] args) { 
     JLabel label = new JLabel("stackoverflow"); 
     label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 

     label.addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent e) { 
       if (Desktop.isDesktopSupported()) { 
        try { 
         Desktop.getDesktop().browse(new URI("http://stackoverflow.com")); 
        } catch (Exception ex) { 
         ex.printStackTrace(); 
        } 
        } else { 
         //TODO 
        } 
      } 
     }); 
     JOptionPane.showMessageDialog(null, label); 
    } 
} 
+0

Спасибо! Я пробовал, но он все еще не работает ... –

+0

@MarinTaverniers, без него в Windows это тоже не сработало. Вы упомянули, что «ссылка кажется кликабельной». Перемещается ли курсор по ссылке? Попробуйте отладить и посмотрите, попадете ли вы в 'hyperlinkUpdate()'. Или добавьте 'System.out.println (e.getEventType());' и посмотрите, получилось ли что-нибудь напечатанное в консоли. – tenorsax

+0

Ну, «.setEditable (false)» изначально был в моем коде, я просто забыл его скопировать/вставить здесь. ^^ ' –

 Смежные вопросы

  • Нет связанных вопросов^_^