Dodawania linków HTML do programu Swing

0

Powitać. Jak dodać link do programu. Jak dodałem link w zwykłym HTML'u to czcionka jest niebieska ale nie ma żadnej akcji. Czytałem tutaj: http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JEditorPane.html lecz nadal wyrzuca błąd, że nie ma tej klasy HyperlinkListener.

0

Takiej klasy nie ma, w cytowanym tutorialu też nie występuje klasa HyperlinkListener. To jest interfejs z pakietu javax.swing.event. Musisz dodać odpowiednią instrukcje importu.

0

Edit: już nic

0

Faktycznie człowiek ślepy to naprawdę szok. Ale mimo to coś jest nie tak. Mój kod:

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;

public class DialogOProgramie extends JDialog{
    JEditorPane htmlPane;
    public DialogOProgramie(JFrame parent){
        super(parent,"Algorytm Luhna - O programie",true);
        String url = "http://host/path";
        Container cp = getContentPane();
        try {
          htmlPane = new JEditorPane(url);
          htmlPane.setEditable(false);
          cp.add(htmlPane);
        } catch(IOException ioe) {
         System.err.println("Error displaying " + url);
        }
        
        cp.setLayout(null);
        setSize(280,280);
    }
     public void hyperlinkUpdate(HyperlinkEvent event) {
    if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
      try {
        htmlPane.setPage(event.getURL());
      } catch(IOException ioe) {
        // Some warning to user
      }
    }
  }

}
 

Jak widać jest to okno dialogowe. Program się kompiluje, uruchamia, lecz gdy klikam przycisk odpowiedzialny za wyświetlenie okna dialogowego to wyświetla się puste okno i pojawia się "Error displaying http://host/path".

0

JEditorPane to nie jest przeglądarka, nie obsługuje JavaSciptu, HTML chyba tylko do wersji 3. I trochę innych braków.
Wpisz adres "http://www.host.com/", to coś zobaczysz.

0

Wyświetla mi "unclosed string literal". Coś czuje, że to nie to czego szukałem. Znalazłem za to coś takiego: http://stackoverflow.com/questions/527719/how-to-add-hyperlink-in-jlabel

Z tym, że mam problem, przerobiłem ten powyższy kod na taki co by obsługiwał ten Desktop i wygląda to tak:

 
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;

public class DialogOProgramie extends JDialog {
    JEditorPane htmlPane;
    JButton button = new JButton("Przycisk");
            
    public DialogOProgramie(JFrame parent)throws URISyntaxException{
        super(parent,"Algorytm Luhna - O programie",true);
        final URI uri = new URI("http://java.sun.com");
        Container cp = getContentPane();
        cp.setLayout(new FlowLayout());
        cp.add(button);
        button.addActionListener(new ActionListener()  {
                public void actionPerformed(ActionEvent e)   {
                
                if (Desktop.isDesktopSupported()) {
                Desktop desktop = Desktop.getDesktop();
                try {
                        desktop.browse(null);
                } catch (IOException en) {
                        // TODO: error handling
                }
          }
                }
        }) ;
        setSize(280,280);
    }

}

I tutaj jest wszystko fajnie tylko w głównym programie przy Listenerze służącym do otwierania tego okna dialogowego wyskakuje błąd:

 
mOprogramie.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                DialogOProgramie dlg = new DialogOProgramie(null); //1.
                dlg.setLocationRelativeTo(null);
                dlg.setResizable(false);
                dlg.show();
            }
        });

W linii oznaczonej 1. woła URISyntaxException, pewnie spowodowane jest to tym, że jest to też dodane do konstruktora tylko gdzie tutaj dodać throws URISyntaxException? Jak dodam po nawiasie (ActionEvent e) to piszą mi, że "overridden method does not throw java.net.URISyntaxException" czyli chyba, że podstawowa wersja tej funkcji co ją tu teraz nadpisuje nie zawiera tego wyjątku. Dopisałem zupełnie inną metodę, która tworzy i wyświetla ten dialog i zawiera ten wyjątek lecz gdy wstawiam ją do tego Listenera to wyświetla znów ten sam błąd że nie ma tego URISyntaxException. Nie mogę tego rozgryźć.

Edit:

Już mam:-) Tak to powinno wyglądać:

 
try{
        final URI uri = new URI("http://java.sun.com");
        
        Container cp = getContentPane();
        cp.setLayout(new FlowLayout());
        cp.add(button);
        button.addActionListener(new ActionListener()  {
                public void actionPerformed(ActionEvent e)   {

                if (Desktop.isDesktopSupported()) {
                Desktop desktop = Desktop.getDesktop();
                try {
                        desktop.browse(uri);
                } catch (IOException en) {
                        // TODO: error handling
                }
          }
                }
        }) ;

       }catch (URISyntaxException uu){

        }

I wszystko ładnie trybi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1