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.
- Rejestracja:około 14 lat
- Ostatnio:ponad 10 lat
- Postów:38
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".
- Rejestracja:około 14 lat
- Ostatnio:ponad 10 lat
- Postów:38
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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.