Extrait de la méthode main de la classe ChapitrePlusTeiLuceneSearcher :
// Recherche n°1 : "mort" dans les balises <p> // 86 résultats BooleanQuery query1 = new BooleanQuery(); query1.add(new TermQuery(new Term("contenu", "mort")), Occur.MUST); query1.add(new TermQuery(new Term("balise", "p")), Occur.MUST); runQuery("Mort dans les balises <p>", query1); // Recherche n°2 : "mort" dans les balises <said> // 8 résultats BooleanQuery query2 = new BooleanQuery(); query2.add(new TermQuery(new Term("contenu", "mort")), Occur.MUST); query2.add(new TermQuery(new Term("balise", "said")), Occur.MUST); runQuery("Mort dans les balises <said>", query2); // Recherche n°3 : copain ou mère dans les balises <said> // 36 résultats BooleanQuery query3 = new BooleanQuery(); BooleanQuery query3bis = new BooleanQuery(); query3bis.add(new TermQuery(new Term("contenu", "copain")), Occur.SHOULD); query3bis.add(new TermQuery(new Term("contenu", "mère")), Occur.SHOULD); query3.add(query3bis, Occur.MUST); query3.add(new TermQuery(new Term("balise", "said")), Occur.MUST); runQuery("copain ou mère dans les balises <said>", query3); // Recherche n°4 : copain et mère dans les balises <said> // 1 résultat BooleanQuery query4 = new BooleanQuery(); query4.add(new TermQuery(new Term("balise", "copain")), Occur.MUST); query4.add(new TermQuery(new Term("balise", "mère")), Occur.MUST); query4.add(new TermQuery(new Term("balise", "said")), Occur.MUST); runQuery("Copain et mère dans les balises <said>", query4); // Recherche n°5 : voyage dans les chapitres 10 à 23 // 9 résultats BooleanQuery query5 = new BooleanQuery(); query5.add(new TermQuery(new Term("contenu","voyage")), Occur.MUST); query5.add(NumericRangeQuery.newIntRange("numero", 10, 23, true, true), Occur.MUST); runQuery("voyage dans les chapitre 10 à 23", query5); // Recherche n°6 : voyage dans les chapitres 12, 15 et 20 // 6 résultats BooleanQuery query6 = new BooleanQuery(); query6.add(new TermQuery(new Term("contenu", "voyage")), Occur.MUST); BooleanQuery subQuery6 = new BooleanQuery(); subQuery6.add(NumericRangeQuery.newIntRange("numero", 11, 13, false, false), Occur.SHOULD); subQuery6.add(NumericRangeQuery.newIntRange("numero", 14, 15, false, true), Occur.SHOULD); subQuery6.add(NumericRangeQuery.newIntRange("numero", 20, 20, true, true), Occur.SHOULD); query6.add(subQuery6, Occur.MUST); runQuery("voyage dans les chapitres 12, 15 et 20", query6); // Recherche n°7 : vie dans les balises <p> des chapitres pairs // 83 résultats BooleanQuery query7 = new BooleanQuery(); query7.add(new TermQuery(new Term("contenu", "vie")), Occur.MUST); query7.add(new TermQuery(new Term("pair", "1")), Occur.MUST); query7.add(new TermQuery(new Term("balise", "p")), Occur.MUST); runQuery("vie dans les chapitres pairs", query7);
Le champ "pair" est créé comme suit dans ChapitrePlusTeiLuceneIndexer :
if (numero % 2 == 0) { doc.add(new StringField("pair", "1", Store.NO)); }
Pour personnaliser un élément graphique, on peut le faire de l'extérieur :
~~~~
:::java
import javax.swing.JFrame;
...
JFrame frame = new JFrame();
frame.setTitle("Mon application");
frame.setSize(300,400);
frame.setLocation(20, 400);
...
frame.setVisible(true);
~~~~
Ou dériver la classe graphique :
import javax.swing.JFrame; ... public class MaFenetre extends JFrame { /** * Constructeur */ public MaFenetre() { setTitle("Mon application"); setSize(300,400); setLocation(20, 400); .... setVisible(true); } ... }
Objectif : réutiliser le code de la classe ChapitreTeiLuceneSearcher dont le code source est disponible sur la page de la séance du [2013-04-10] pour développer une interface graphique permettant de rechercher dans l'index.
On peut récupérer les dimensions de l'écran en utilisant la classe java.awt.Toolkit :
// Taille de l'écran Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
Pour adapter l'aspect de l'interface graphique à votre système d'exploitation, on pourra utiliser la classe javax.swing.UIManager :
// Look natif try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); }
Pour positionner un raccourci clavier sur un JMenuItem (CTRL-O ici) :
menuItem.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
Pour désactiver un menu :
menu.setEnabled(false);
Activer un menu :
JMenuItem menuItem = new JMenuItem("item"); .... menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { System.out.println("Coucou"); } });
Changer le comportement lors de la fermeture de la fenêtre :
// Fermeture de la fenêtre setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent evt) { // Instructions executées à la fermeture de la fenêtre ... } });
Ouvrir un sélecteur de dossiers :
JFileChoose directoryBrowser = new JFileChooser(); directoryBrowser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (directoryBrowser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { // L'utilisateur a annulé } else { // Affichage du dossier sélectionné System.out.println("Dossier = " + directoryBrowser.getSelectedFile()); }
Wiki: 2012-2013
Wiki: 2013-04-10
Anonymous
Pour lancer l'application exemple :