IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

Comment ouvrir un fichier listé en cliquant sur un bouton?


Sujet :

Interfaces Graphiques en Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Comment ouvrir un fichier listé en cliquant sur un bouton?
    Bonjour,

    en cette veille de noël je me retrouve avec un dernier soucis, je voudrais donc lier une action a un bouton, a savoir ouvrir un fichier dont on possède la liste sous les yeux, le but étant donc de cliquer sur un fichier dans la liste, puis d'appuyer sur le bouton "ouvrir" pour que le fichier sélectionné s'ouvre.

    Il s'agit donc de fichiers pdf uniquement ainsi pour ouvrir le fichier il me semble que cette portion de code est bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class ShowPDF { 
    public static void main(String[] args) throws Exception { 
    Process p = 
    Runtime.getRuntime() 
    .exec("rundll32 url.dll,FileProtocolHandler c:/pdf/mypdf.pdf");  
    System.out.println("Done."); 
    } 
    }

    Maintenant je n'arrive pas a le relier a mon code, ayant procédé différemment pour les autres boutons je me retrouve légèrement coincé...

    Pourriez vous m'aider encore une fois svp?

    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    package projet; 
     
    import java.awt.Color; 
    import java.awt.Component; 
    import java.awt.Desktop; 
    import java.awt.GridLayout; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JList; 
    import javax.swing.JMenu; 
    import javax.swing.JMenuBar; 
    import javax.swing.JMenuItem; 
    import javax.swing.JPanel; 
    import javax.swing.JScrollPane; 
    import javax.swing.JTextField; 
    import javax.swing.ListSelectionModel; 
    import javax.swing.border.LineBorder; 
    import javax.swing.event.ListSelectionEvent; 
    import javax.swing.event.ListSelectionListener; 
     
    import java.io.File; 
    import java.io.IOException; 
    import java.util.ArrayList; 
    import java.util.List; 
     
    public class ArboIHM extends JFrame implements ActionListener { 
     
    private List<File> liste = new ArrayList<File>(); 
    private JPanel panel = new JPanel(); 
    private JPanel boutons = new JPanel(); 
    private JButton triNom = new JButton("Arborescence triée par nom"); 
    private JButton triTaille = new JButton("Arborescence triée par taille"); 
    // private JButton triDate = new JButton("Arborescence triée par date"); 
    private File test = new File("."); 
    private ArboTrieeParNom a1 = new ArboTrieeParNom(test);; 
    private ArboTrieeParTaille at1 = new ArboTrieeParTaille(test); 
    private JList laListe = new JList(liste.toArray());; 
    private JLabel nomLabel = new JLabel("Nom : "); 
    private JLabel tailleLabel = new JLabel("Taille : "); 
    private JLabel dateLabel = new JLabel("Date : "); 
    private JPanel nom = new JPanel(); 
    private JPanel taille = new JPanel(); 
    private JPanel date = new JPanel(); 
    private JTextField nomTexte = new JTextField("Veuillez sélectionner un fichier",20); 
    private JTextField tailleTexte = new JTextField("Veuillez sélectionner un fichier",20); 
    private JTextField dateTexte = new JTextField("Veuillez sélectionner un fichier",20); 
    private JTextField typeTexte = new JTextField("Veuillez sélectionner un fichier",20); 
    private JScrollPane scrollPane = new JScrollPane(laListe); 
    private JButton ouvrir = new JButton("Ouvrir le fichier"); 
    private GridLayout g1 = new GridLayout(3, 1); 
    private JLabel typeLabel = new JLabel("Type : "); 
    private JPanel type = new JPanel(); 
    private JScrollPane j1 = new JScrollPane(laListe); 
    private JPanel infos = new JPanel(); 
    private FileProperty p1; 
    private File f1; 
     
    public ArboIHM() { 
    init(); 
     
    } 
     
    private class triParNom implements ActionListener { 
    public void actionPerformed(ActionEvent arg0) { 
    laListe.setListData(a1.getListe().toArray()); 
    } 
    } 
     
    private class triParTaille implements ActionListener { 
    public void actionPerformed(ActionEvent arg0) { 
    laListe.setListData(at1.getListe().toArray()); 
    } 
    } 
     
     
    public void init() { 
    setVisible(true); 
    this.setJMenuBar(this.creationBarreDeMenu()); 
    setTitle("Projet de JAVA"); 
    pack(); 
    setSize(700, 300); 
    this.setLocationRelativeTo(null); 
    setResizable(false); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
     
    nomTexte.setEditable(false); 
    dateTexte.setEditable(false); 
    tailleTexte.setEditable(false); 
    typeTexte.setEditable(false); 
     
     
    add(panel); 
    nom.add(nomLabel); 
    nom.add(nomTexte); 
    date.add(dateLabel); 
    date.add(dateTexte); 
    taille.add(tailleLabel); 
    taille.add(tailleTexte); 
    type.add(typeLabel); 
    type.add(typeTexte); 
     
    boutons.add(triNom); 
    boutons.add(triTaille); 
    boutons.add(ouvrir); 
     
    infos.add(nom); 
    infos.add(date); 
    infos.add(taille); 
    infos.add(type); 
     
    panel.setLayout(g1); 
    panel.add(boutons); 
    panel.add(infos); 
    j1.setViewportView(laListe); 
    panel.add(j1); 
     
    triNom.addActionListener(new triParNom()); 
    triTaille.addActionListener(new triParTaille()); 
     
    laListe.setBorder(new LineBorder(Color.black)); 
    laListe.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    laListe.addListSelectionListener(new ListSelectionListener() { 
    public void valueChanged(ListSelectionEvent e) { 
    File f1 = (File) laListe.getSelectedValue(); 
    FileProperty p1 = new FileProperty(f1.getName()); 
    nomTexte.setText(f1.getName()); 
    dateTexte.setText(p1.getFormatedDate()); 
    tailleTexte.setText(p1.getFormatedSize()); 
    typeTexte.setText(p1.getType()); 
     
    } 
    }); 
     
    panel.updateUI(); 
    } 
     
    private JMenuBar creationBarreDeMenu() { 
     
    JMenuBar jmb = new JMenuBar(); 
     
    JMenu fichier = new JMenu("Fichier"); 
    JMenu aide = new JMenu("?"); 
     
    JMenuItem itemNouveau = new JMenuItem("Nouveau"); 
    JMenuItem itemSauver = new JMenuItem("Sauvegarder"); 
    JMenuItem itemCharger = new JMenuItem("Charger"); 
    JMenuItem itemQuitter = new JMenuItem("Quitter"); 
    JMenuItem itemPropos = new JMenuItem("A Propos"); 
    JMenuItem itemAide = new JMenuItem("Aide"); 
     
    fichier.add(itemNouveau); 
    fichier.add(itemSauver); 
    fichier.add(itemCharger); 
    fichier.add(itemQuitter); 
    aide.add(itemPropos); 
    aide.add(itemAide); 
     
    jmb.add(fichier); 
    jmb.add(aide); 
     
    itemQuitter.addActionListener(this); 
     
    return jmb; 
     
    } 
     
    public void actionPerformed(ActionEvent e) { 
     
    String action = e.getActionCommand(); 
     
    if (action.equals("Quitter")) { 
    System.exit(0); 
    } 
    } 
     
    public static void main(String... args) { 
    new ArboIHM(); 
    } 
    }
    Je précise néanmoins que je possède d'autres classes et que les autres boutons sont reliés et fonctionnent correctement...
    Je ne possède en revanche pas de classe pour le bouton Ouvrir, d'ou mon soucis

    Ceci est normalement le seul soucis qui me pose un gros problème et je ne trouve vraiment pas la solution...j'ai regardé sur plein de sites, sauf que je n'ai pas pu trouver de réponse puisque dans mon cas l'utilisateur doit sélectionner un fichier dans la liste qui est affichée, avant de cliquer sur "ouvrir" pour que le programme ouvre directement le fichier sélectionné...

    Si jamais mon problème est trop dur a résoudre, il est possible que vous me fournissiez une autre solution, comme par exemple de demander a l'utilisateur d'ouvrir le fichier a partir d'une nouvelle fenêtre auquel cas j'aimerais bien aussi connaître la solution...même si je préférerais avoir une réponse a la solution que j'aimerais faire....

    Pour résumer si vous avez moyen de solutionner mon soucis j'aimerais beaucoup avoir votre avis, sinon j'aimerais donc une autre solution pour mon problème !

    Merci d'avance

    PS : j'ai mis mes classes en pièces jointes


    EDIT : je résume une dernière fois de façon explicite le soucis : Quand on ouvre le programme on voit une liste avec pleins de PDF dedans, je voudrais donc cliquer sur un d'entre eux, ensuite cliquer sur le bouton "ouvrir le fichier" et que ça ouvre directement le fichier dans acrobat reader.

    EDIT 2 : A priori en changeant le private FileProperty p1; par du private static FileProperty p1; je peux passer ma variable en globale, et je pourrais m'en servir ensuite pour ma méthode "ouvrir" sauf que je ne vois pas quoi mettre dedans...
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 793
    Points
    4 793
    Par défaut
    C'est un peu étrange que tu n'y arrives pas étant donné que tu as déjà fait des classes implémentant ActionListener (triParNom et triParTaille)
    et que tu les as bien reliées à tes boutons.

    Donc il te suffit de créer une classe interne "affichePdf" sur le même principe
    dans laquelle tu mets ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private class affichePdf implements ActionListener { 
    public void actionPerformed(ActionEvent arg0) { 
    // ici le code qui ouvre le pdf 
    } 
    }
    pour que le code ouvre automatiquement du pdf, voir la FAQ
    si j'ai bien compris, le fichier pdf est identifié par l'objet File f1.
    du coup, le code (copié sur la FAQ) pour l'ouvrir serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ( Desktop.isDesktopSupported() ) {
    	Desktop desktop = Desktop.getDesktop();
    	if (desktop.isSupported(Desktop.Action.OPEN)) {
    		desktop.open(f1);
    	}
    }
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta solution, a cela il faut rajouter le lien avec le bouton dans la fonction a savoir : ouvrir.addActionListener(new AffichePDF()); pour mon exemple.

    Néanmoins j'ai tout un paquet d'erreurs que je te liste ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: File must not be null
    	at java.awt.Desktop.checkFileValidation(Unknown Source)
    	at java.awt.Desktop.open(Unknown Source)
    	at projet.ArboIHM$AffichePDF.actionPerformed(ArboIHM.java:284)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$000(Unknown Source)
    	at java.awt.EventQueue$1.run(Unknown Source)
    	at java.awt.EventQueue$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$2.run(Unknown Source)
    	at java.awt.EventQueue$2.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)

    ça fait tout de même un paquet d'erreurs !

    Saurais-tu me dire comment les résoudre (le code source a pas mal changé depuis la dernière fois)



    PS : Je suis sous Windows Vista, et le programme est censé tourner sur tout OS
    La ligne 284 étant celle la : desktop.open(f1);

    En pièces jointes le résultat actuel de mon programme.
    Fichiers attachés Fichiers attachés

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Les 3 pièces jointes qui manquaient a mon précédent message :
    Fichiers attachés Fichiers attachés

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Soucis résolu, j'avais oublié tout bêtement un "File" devant mon f1 lors d'une déclaration dans le changedvalue.... merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/04/2015, 03h52
  2. [Toutes versions] Ouvrir un fichier PDF en cliquant sur le nom de la cellule Excel
    Par zergo dans le forum Excel
    Réponses: 2
    Dernier message: 20/02/2015, 10h44
  3. Appeler un fichier PDF en cliquant sur un bouton
    Par bourbah dans le forum Struts 2
    Réponses: 1
    Dernier message: 09/03/2011, 17h30
  4. Ouvrir un fichier word en cliquant sur un Tlabel ?
    Par bahamut100 dans le forum Débuter
    Réponses: 9
    Dernier message: 18/10/2007, 20h14
  5. PHP + lier fichier wav en cliquant sur un bouton
    Par ushiwa.sasuke dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/02/2006, 08h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo