Gilliek
22nov/111

Java et les JFileChooser

Java des fois, tu me fais ch*** !

Je bosse actuellement sur un logiciel de traitement d'image en Java ( coming soon ;-) ) ... et j'ai besoin de manipuler des JFileChooser (pour sélectionner des fichiers et des dossiers).  Avant de pester contre ce foutu Swing d'énoncer mon soucis, je vais dire deux mots sur Swing, pour ceux qui ne connaîtraient pas.

Swing est une bibliothèque graphique pour Java. Elle permet donc de créer des interfaces graphiques. Ce qui est pratique, c'est que ça fonctionne sur n'importe quel système d'exploitation, donc pas mal pour du développement multiplateforme. (petit troll : et c'est beaucoup plus confortable à utiliser que C et GTK ... bien que je préfère largement le C à Java).

Revenons à nos moutons. Qu'est-ce qui me fait actuellement ch*** avec JFileChooser ? Et bien la réponse est simple : son implémentation moisie ! C'est un composant très peu personnalisable. Par exemple, si on veut garder uniquement la fenêtre de navigation sans les boutons, le sélectionneur de type de fichiers et toussa, on s'amuse avec la méthode remove(getComponent(index)) à chercher quel est le bon composant à virer. Ou aussi ce qui est à l'origine de ce post : comment choisir le mode d'affichage par défaut (liste ou détails). Je m'attendais à devoir faire un simple setViewMode(JFileChooser.DETAILS), comme en Qt quoi ... mais non faut faire un hack dégueulasse pour arriver à ses fins ! (Rhaaaaaa)

Après quelques énervements, j'ai trouvé un topic sur un forum qui m'a bien aidé :

La solution consiste à utiliser SwingUtils, téléchargeable sur le site : http://tips4java.wordpress.com/2008/11/13/swing-utils/

Il suffit ensuite de mettre le code trouvé sur le topic mentionné précédemment :

JFileChooser fileChooser = new JFileChooser();
AbstractButton button = SwingUtils.getDescendantOfType(AbstractButton.class,
      fileChooser, "Icon", UIManager.getIcon("FileChooser.detailsViewIcon"));
button.doClick();

Et le tour est joué ! Mais je trouve ça vraiment dégueulasse personnellement ...

De manière plus générale, je trouve leur JFileChooser vraiment très pauvre. En plus de ne pas être très confortable à l'utilisation, il n'est pas personnalisable ... c'est vraiment dommage. Il va peut-être falloir que j'en code un moi-même quand j'en aurai le temps ... à suivre ...

 

Edit : Cette solution foire sur Mac OS (ça ne compile pas ...) . De plus, la façon avec laquelle j'ai encore modifié le JFileChooser (avec la méthode remove) fait foirer l'affichage sous Mac OS ...

Edit 2 : J'ai entamé (et déjà bien avancé) le codage de mon propre FileChooser et pour l'instant ça fonctionne bien :-)

21nov/114

Astuce Android : Authentification SSH avec une clef publique

(article un peu technique)

Si comme moi vous avez des serveurs sur lesquels vous voulez vous authentifier depuis votre smartphone Android, ce post est pour vous ;-)

Les prérequis pour cette astuce :

  • Un serveur disposant d'un serveur SSH (au début, votre serveur SSH devra autoriser les connexions par mot de passe. Une fois la clé ajoutée, je vous conseille d'y désactiver)
  • D'un téléphone sous Android (ou d'une tablette)

Voilà le problème : Comment s'authentifier sur son serveur via SSH avec une paire de clés privée/publique depuis Android ?

La solution est assez simple. C'est ce que nous allons voir ici :

  1. Depuis l'Android Market, téléchargez l'application Connect Bot
  2. Lancez l'application puis allez dans le menu > Gérer les clés publiques
  3. De nouveau, allez dans le menu > Générer
  4. Choisissez un pseudo pour identifier votre clé, le type et une passphrase, puis cliquez sur "Générer"
  5. Pour renforcer l'aléatoire, bougez votre doigt de manière aléatoire sur la surface indiquée
  6. Une fois la clé générée, laissez votre doigt appuyé dessus jusqu'à ce que le menu apparaisse.
  7. Choisissez "Copier la clé publique"
  8. Revenez en arrière et connectez-vous sur votre serveur.
  9. Une fois connecté, il nous faut ajouter votre clé sur le serveur. Pour cela, saisiseez la commande suivante :
echo "votre_clé" >> .ssh/authorized_keys

votre_clé est votre clé publique que vous devez coller à l'aide de menu > coller

Ensuite, il ne vous reste plus qu'à vous connecter depuis Connect Bot en allant dans menu > Gérer les clés publique . Puis, cliquez sur votre clé et entrez la passphrase saisie à la génération de la clé. Une fois cela fait, il ne vous reste plus qu'à vous connecter normalement sur votre serveur ;-)

J'ai testé cette astuce depuis un Samsung Galaxy SII sous Android 2.3.3, mais en principe ça devrait fonctionner avec n'importe quelle version d'Android pour autant qu'elle dispose de la dernière version de l'application Connect Bot.

Merci quand même à ceux qui testeraient cette astuce de mettre un commentaire avec le modèle du téléphone et la version d'Android utilisée et si tout fonctionne :-)

Il y a aussi des clients SFTP (pour le transfert des fichiers) tels que AndFTP et FtpCafé qui devraient gérer l'authentification par clé, mais je n'ai pas encore testé. Cela fera sans doute l'objet d'un futur post.