2016-08-04 4 views
0

JOptionPane에 표시되는 JEditorPane이있어 애플리케이션을 닫기 전에 열려야하는 URL이 있습니다. Windows 및 Linux에서는 잘 작동하지만 Mac에서는 작동하지 않습니다. 여기 MAC에서 JEditorPane의 하이퍼 링크가 열리지 않습니다.

코드입니다 :

//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

더 도움이 빨리 들어, 게시 A [MCVE] 또는 [포함 된 짧은, 자기, 올바른 예 (http://www.sscce.org/). –

답변

4

봅니다 :

editor_pane.setEditable(false); 

창에는 링크를 클릭 할 때까지 읽기 전용이어야합니다. 자세한 내용은 JEditorPane를 참조하십시오 JEditorPane의 편집 할 수없는 경우

html로 된 EditorKit가 하이퍼 링크 이벤트를 생성합니다() (거짓 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, 그것없이 윈도우에서도 잘 작동하지 않았다. 귀하는 '링크가 클릭 가능한 것으로 보입니다'라고 말씀하셨습니다. 링크 위로 커서가 바뀌 었습니까? 디버깅을 시도하고,'hyperlinkUpdate()'에 들어가는 지보십시오. 또는'System.out.println (e.getEventType());'을 추가하여 콘솔에 아무 것도 출력되지 않았는지 확인하십시오. – tenorsax

+0

글쎄, ".setEditable (false)"는 원래 코드에 있었기 때문에 여기에 복사/붙여 넣기하는 것을 잊어 버렸습니다 .. ^^ ' –

관련 문제