Bonjour,
Je veux afficher des liens vers des fichiers stockés dans un dossier dans un JTextPane et en plus lorsque l'user fait un click sur un des liens affiché, le fichier s'ouvre automatiquement
Merci pour votre aide :)
Version imprimable
Bonjour,
Je veux afficher des liens vers des fichiers stockés dans un dossier dans un JTextPane et en plus lorsque l'user fait un click sur un des liens affiché, le fichier s'ouvre automatiquement
Merci pour votre aide :)
Salut,
par exemple, sur Windows :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 JTextPane pane=new JTextPane(); pane.setContentType("text/html"); pane.setText("<html><body><a href='file://c:/temp/test.txt'>Test</a></body></html>"); pane.setEditable(false); pane.addHyperlinkListener(new HyperlinkListener() { @Override public void hyperlinkUpdate(HyperlinkEvent e) { URL url = e.getURL(); // ici lancer l'ouverture du fichier // par exemple , pour lancer l'appli Windows associée par défaut: try { Runtime.getRuntime().exec( "cmd /c \"start \"\" \""+url.toString()+"\"" ); } catch (IOException e1) { e1.printStackTrace(); } } });
titititi
faut utiliser les fonctions de la classe Desktop maintenant, pour assurer la portabilité.
Oui, certes. Je travaille qu'exclusivement en 1.5 et Eclipse RCP (donc j'utilise plutôt la classe Program) et j'oublie trop souvent les nouvelles classes, comme Desktop. Par contre, cette classe ne permet pas d'ouvrir directement n'importe quelle url (comme une url de protocole http par exemple, mais c'est vrai, que la question ne concernait que des fichiers d'un dossier).
Autre chose plus importante que j'ai oublié : le test du type d'évenement !
Donc voici une correction de mon exemple :
EDIT : j'ai fait quelques tests, et si j'appelleCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 JTextPane pane=new JTextPane(); pane.setContentType("text/html"); pane.setText("<html><body><a href='file:/c:/temp/test.txt'>Test fichier local</a><br>" + "<a href='http://java.developpez.com/'>Forum java</a></body></html>"); pane.setEditable(false); pane.addHyperlinkListener(new HyperlinkListener() { @Override public void hyperlinkUpdate(HyperlinkEvent e) { if( HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType()) ) { URL url = e.getURL(); // ici lancer l'ouverture du fichier try { if ( "file".equals(url.getProtocol()) ) { Desktop.getDesktop().open(new File(url.getFile())); } else if ( "http".equals(url.getProtocol()) ) { Desktop.getDesktop().browse(url.toURI()); } } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } } } });
sur une url du type file:, cela ouvre mon fichier dans l'éditeur de fichierCode:Desktop.getDesktop().browse(url.toURI());
mais est ce bien un comportement standard cross-platform ?