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 :