/* *Copyright 2007, 2011 CCLS Columbia University (USA), LIFO University of Orl��ans (France), BRGM (France) * *Authors: Cyril Nortet, Xiangrong Kong, Ansaf Salleb-Aouissi, Christel Vrain, Daniel Cassard * *This file is part of QuantMiner. * *QuantMiner is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. * *QuantMiner is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * *You should have received a copy of the GNU General Public License along with QuantMiner. If not, see <http://www.gnu.org/licenses/>. */ package src.graphicalInterface; import javax.swing.*; import src.apriori.*; import src.database.CsvFileParser; import src.solver.*; import src.tools.*; import com.Ostermiller.util.ExcelCSVPrinter; import java.awt.*; import java.awt.datatransfer.*; import java.io.*; import java.util.*; public class PanelResults extends DatabasePanelAssistant { //step 5 //called when saving file in html with graph private class ResultatsEnregistreurGraphiqueRegle implements ResolutionContext.EnregistreurGraphiqueRegle { //Enregistrer means record/write down private String m_sNomBaseFichier = null; ResultatsEnregistreurGraphiqueRegle(String sNomBaseFichier) { super(); m_sNomBaseFichier = sNomBaseFichier; } public String EnregistrerRegle(AssociationRule regle, int iIndiceRegle) { //record rules File fichier = null; String sCheminFichier = null; sCheminFichier = m_sNomBaseFichier+String.valueOf(iIndiceRegle)+".jpg"; m_afficheurRegles.EnregistrerImageRegle(regle, iIndiceRegle, sCheminFichier); fichier = new File(sCheminFichier); return fichier.getName(); } } /** Creates new form PanneauResultats */ public PanelResults(ResolutionContext contexteResolution) { super(contexteResolution); int iNombreRegles = 0; AssociationRule [] tRegles = null; m_tReglesFiltrees = null; // If les rules sont issues d'un file, on commence by les load : if (super.m_contexteResolution.m_iTechniqueResolution == ResolutionContext.TECHNIQUE_CHARGEMENT) { //if it load file super.m_contexteResolution.m_sDescriptionRegles = m_contexteResolution.m_parametresTechChargement.m_sDescriptionRegles; super.m_contexteResolution.ChargerReglesBinaire(super.m_contexteResolution.m_parametresTechChargement.m_sNomFichier); } // Mise � jour des informations de filtrage : super.m_contexteResolution.GenererStructuresDonneesSelonBDPriseEnCompte_Filtrage(); super.m_contexteResolution.MettreAJourDonneesInternesFiltre_Filtrage(); initComponents(); jButtonCopy.setIcon( new ImageIcon( ENV.REPERTOIRE_RESSOURCES + "copier.jpg" ) ); //set icon for the copy button jTextNumeroRegle.setText("no rule selected"); //initialized with no rule selected //the middle part m_panneauTri = new PanelSort(this, super.m_contexteResolution); m_panneauTri.setBorder(new javax.swing.border.EtchedBorder()); add(m_panneauTri); //the third part m_afficheurRegles = new RuleBrowser(super.m_contexteResolution); m_afficheurRegles.setBackground(new java.awt.Color(255, 255, 255)); jScrollRegles.setViewportView(m_afficheurRegles); jScrollRegles.validate(); //the scroll bar jScrollBarRegles.setMinimum(0); jScrollBarRegles.setMaximum(0); jScrollBarRegles.setUnitIncrement(1); jScrollBarRegles.setVisibleAmount(1); iNombreRegles = 0; if (super.m_contexteResolution.m_listeRegles != null){ iNombreRegles = super.m_contexteResolution.m_listeRegles.size(); } if (iNombreRegles > 0) { // Calcul des mesures suppl�mentaires permettant d'�valuer plus finement les r�gles : // (si les r�gles ont �t� charg�es depuis un fichier, ces calculs sont d�j� faits) if (super.m_contexteResolution.m_iTechniqueResolution != ResolutionContext.TECHNIQUE_CHARGEMENT) { tRegles = new AssociationRule [1]; tRegles = (AssociationRule [])(super.m_contexteResolution.m_listeRegles.toArray(tRegles)); AssociationRule.CalculerMesuresDiverses(tRegles, super.m_contexteResolution); } jScrollBarRegles.setMaximum( iNombreRegles-1 ); } else jScrollBarRegles.setMaximum( 0 ); super.DefinirEtape(5, "Results", ENV.REPERTOIRE_AIDE+"consult_results.htm"); switch (m_contexteResolution.m_iTechniqueResolution) { case ResolutionContext.TECHNIQUE_APRIORI_QUAL : super.DefinirPanneauPrecedent(MainWindow.PANNEAU_TECH_GENERIQUE); break; case ResolutionContext.TECHNIQUE_ALGO_GENETIQUE : super.DefinirPanneauPrecedent(MainWindow.PANNEAU_TECH_GENERIQUE); break; case ResolutionContext.TECHNIQUE_RECUIT_SIMULE : super.DefinirPanneauPrecedent(MainWindow.PANNEAU_TECH_GENERIQUE); break; case ResolutionContext.TECHNIQUE_CHARGEMENT : super.DefinirPanneauPrecedent(MainWindow.PANNEAU_CONFIG_TECHNIQUE); break; default: super.DefinirPanneauPrecedent(MainWindow.PANNEAU_AUCUN); } super.DefinirPanneauSuivant(MainWindow.PANNEAU_AUCUN); super.initBaseComponents(); MettreAJourListeRegles(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ private void initComponents() {//GEN-BEGIN:initComponents jScrollBarRegles = new javax.swing.JScrollBar(); //rule scroll bar jButtonSauver = new javax.swing.JButton(); //save in a file jTextNumeroRegle = new javax.swing.JTextField(); //rules jScrollRegles = new javax.swing.JScrollPane(); //rules jButtonCopy = new javax.swing.JButton(); //copy button jButtonVoirContexte = new javax.swing.JButton(); //visualize the extraction context jButtonExtractRows = new javax.swing.JButton(); //Extract the rows of a specific rule setLayout(null); //text field --number of rules jTextNumeroRegle.setEditable(false); jTextNumeroRegle.setFont(new java.awt.Font("Dialog", 1, 12)); jTextNumeroRegle.setText("Rule n\u00b0.. / .. (total : ...)"); add(jTextNumeroRegle); jTextNumeroRegle.setBounds(10, 110, 210, 20); //scroll bar jScrollBarRegles.setMaximum(0); jScrollBarRegles.setOrientation(javax.swing.JScrollBar.HORIZONTAL); jScrollBarRegles.addAdjustmentListener(new java.awt.event.AdjustmentListener() { public void adjustmentValueChanged(java.awt.event.AdjustmentEvent evt) { jScrollBarReglesAdjustmentValueChanged(evt); } }); add(jScrollBarRegles); jScrollBarRegles.setBounds(220, 110, 100, 20); //jScrollBarRegles.setBounds(220, 110, 130, 20); //copy button jButtonCopy.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonCopyActionPerformed(evt); } }); add(jButtonCopy); jButtonCopy.setBounds(320, 110, 20, 20); // jButtonCopy.setBounds(350, 110, 20, 20); //button --Extract rows for a specific rule jButtonExtractRows.setText("Extract rows"); jButtonExtractRows.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonExtractActionPerformed(evt); } }); add(jButtonExtractRows); jButtonExtractRows.setBounds(340, 110, 120, 20); //button --save in a file jButtonSauver.setText("Save in a file"); jButtonSauver.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonSauverActionPerformed(evt); } }); add(jButtonSauver); jButtonSauver.setBounds(10, 10, 210, 26); //scroll panel --about resulted rules jScrollRegles.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jScrollRegles.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); add(jScrollRegles); jScrollRegles.setBounds(10, 130, 360, 40); //button --Visualize the extraction context jButtonVoirContexte.setText("Visualize the extraction context"); jButtonVoirContexte.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonVoirContexteActionPerformed(evt); } }); add(jButtonVoirContexte); jButtonVoirContexte.setBounds(240, 10, 250, 26); }//GEN-END:initComponents private void jButtonVoirContexteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonVoirContexteActionPerformed DialogWindowInfoHTML dialogContexte = null; String sInfosContexte = null; sInfosContexte = this.m_contexteResolution.ObtenirInfosContexte(true); dialogContexte = new DialogWindowInfoHTML("Information on the context of extraction of rules", sInfosContexte, this.m_contexteResolution.m_fenetreProprietaire, true); dialogContexte.show(); }//GEN-LAST:event_jButtonVoirContexteActionPerformed private void jButtonCopyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCopyActionPerformed StringSelection selection = null; AssociationRule regleCourante = null; Clipboard clipboard = null; // On place la r�gle courante dans le presse papier : try { clipboard = getToolkit().getSystemClipboard(); regleCourante = ObtenirRegleCourante(); if (regleCourante != null) selection = new StringSelection( regleCourante.toString() ); else selection = new StringSelection( "No rule copied!"); clipboard.setContents(selection, selection); } catch (HeadlessException e) {} }//GEN-LAST:event_jButtonCopyActionPerformed //save result in a file private void jButtonSauverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSauverActionPerformed String sFichierChoisi = null; DialogChoiceFileRecords fenetreTypeEnregistrement = null; DialogChoiceFileRecords.DialogChoixEnregistrementFichier_Donnees donnees = null; ResultatsEnregistreurGraphiqueRegle enregistreurGraphique = null; //save a list of rules, dialog fenetreTypeEnregistrement = new DialogChoiceFileRecords(m_contexteResolution, m_contexteResolution.m_fenetreProprietaire, true); donnees = fenetreTypeEnregistrement.LierStructureDonnees(); fenetreTypeEnregistrement.show(); //cancel if (donnees.m_iTypeEnregistrement == DialogChoiceFileRecords.TYPE_ENREGISTREMENT_ANNULER) return; m_contexteResolution.m_sNomUtilisateur = donnees.m_sNomUtilisateur; //user name m_contexteResolution.m_sDescriptionRegles = donnees.m_sDescriptionRegles; //rule description //save as html file (text or graphic) if ( (donnees.m_iTypeEnregistrement == DialogChoiceFileRecords.TYPE_ENREGISTREMENT_HTML_TEXTE) ||(donnees.m_iTypeEnregistrement == DialogChoiceFileRecords.TYPE_ENREGISTREMENT_HTML_GRAPHIQUE) ) sFichierChoisi = ToolsInterface.DialogSauvegardeFichier(this, ENV.REPERTOIRE_RESULTATS, "HTML File", "htm");//"Fichiers HTML", "htm"); //save as qmr file else if (donnees.m_iTypeEnregistrement == DialogChoiceFileRecords.TYPE_ENREGISTREMENT_BINAIRE) sFichierChoisi = ToolsInterface.DialogSauvegardeFichier(this, ENV.REPERTOIRE_REGLES_QMR, "QuantMiner File", "qmr");//"Fichiers QuantMiner", "qmr"); //save as csv file else sFichierChoisi = ToolsInterface.DialogSauvegardeFichier(this, ENV.REPERTOIRE_RESULTATS, "CSV File", "csv"); if (sFichierChoisi != null) { switch (donnees.m_iTypeEnregistrement) { case DialogChoiceFileRecords.TYPE_ENREGISTREMENT_HTML_TEXTE : super.m_contexteResolution.SauvegarderReglesHTML(sFichierChoisi, m_tReglesFiltrees, false, null); break; case DialogChoiceFileRecords.TYPE_ENREGISTREMENT_HTML_GRAPHIQUE : enregistreurGraphique = new ResultatsEnregistreurGraphiqueRegle( FileTools.ObtenirCheminSansExtension(sFichierChoisi) ); super.m_contexteResolution.SauvegarderReglesHTML(sFichierChoisi, m_tReglesFiltrees, true, enregistreurGraphique); break; case DialogChoiceFileRecords.TYPE_ENREGISTREMENT_BINAIRE : super.m_contexteResolution.SauvegarderReglesBinaire(sFichierChoisi, m_tReglesFiltrees); break; case DialogChoiceFileRecords.TYPE_ENREGISTREMENT_CSV : super.m_contexteResolution.SauvegarderReglesCsv(sFichierChoisi, m_tReglesFiltrees); break; } } }//GEN-LAST:event_jButtonSauverActionPerformed //Extract the rows for a specific rule private void jButtonExtractActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonExtractActionPerformed System.out.println("m_iIndexCurrentRule" + m_iIndexCurrentRule); String sFichierChoisi = null; sFichierChoisi = ToolsInterface.DialogSauvegardeFichier(this, ENV.REPERTOIRE_RESULTATS, "CSV File", "csv"); System.out.println(sFichierChoisi); ExcelCSVPrinter csvPrinter = null; try { csvPrinter = new ExcelCSVPrinter(new FileOutputStream(sFichierChoisi)); } catch(IOException e) { System.out.println( e.getMessage() ); return; } if (m_tReglesFiltrees == null) return; if (m_tReglesFiltrees[m_iIndexCurrentRule] == null) return; String left = m_tReglesFiltrees[m_iIndexCurrentRule].leftToString(); System.out.println(left); String right = m_tReglesFiltrees[m_iIndexCurrentRule].rightToString(); System.out.println(right); CsvFileParser csvParser = super.m_contexteResolution.m_gestionnaireBD.csvParser; Vector<Qualitative> leftQualitative = m_tReglesFiltrees[m_iIndexCurrentRule].leftQualiToArray(); Vector<Vector<Quantitative>> leftQuantitative = m_tReglesFiltrees[m_iIndexCurrentRule].leftQuantiToArray(); Vector<Qualitative> rightQualitative = m_tReglesFiltrees[m_iIndexCurrentRule].rightQualiToArray(); Vector<Vector<Quantitative>> rightQuantitative = m_tReglesFiltrees[m_iIndexCurrentRule].rightQuantiToArray(); //////////////////////////////////////////////////////////////////////////////////////////////////////////////// Vector<String> label = new Vector<String>(); if (leftQualitative != null) for (int i = 0; i < leftQualitative.size(); i++){ label.add(leftQualitative.get(i).getM_name()); } if (rightQualitative != null) for (int i = 0; i < rightQualitative.size(); i++){ label.add(rightQualitative.get(i).getM_name()); } if (leftQuantitative != null) for (int i = 0; i < leftQuantitative.get(0).size(); i++){ label.add(leftQuantitative.get(0).get(i).getM_name()); } if (rightQuantitative != null) for (int i = 0; i < rightQuantitative.get(0).size(); i++){ label.add(rightQuantitative.get(0).get(i).getM_name()); } String[] labelString = new String[1]; labelString = (String[])label.toArray(labelString); try { //csvPrinter.writeln(labelString); csvPrinter.writeln(csvParser.m_nameChamp); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// int countline = 0; for (int line = 0; line < csvParser.ObtenirNombreLignes(); line++){ boolean running = false; if (leftQualitative != null){ Iterator<Qualitative> iterLeftQuali = leftQualitative.iterator(); while(iterLeftQuali.hasNext()){ Qualitative ruleElement = (Qualitative) iterLeftQuali.next(); int index = csvParser.ObtenirIndiceChamp(ruleElement.getM_name()); if (csvParser.m_data[line][index].equals(ruleElement.getM_value())) running = true; else { running = false; break; } } } if (!running) continue; if (rightQualitative != null){ Iterator<Qualitative> iterRightQuali = rightQualitative.iterator(); while(iterRightQuali.hasNext()){ Qualitative ruleElement = (Qualitative) iterRightQuali.next(); int index = csvParser.ObtenirIndiceChamp(ruleElement.getM_name()); if (csvParser.m_data[line][index].equals(ruleElement.getM_value())) running = true; else { running = false; break; } } } if (!running) continue; if (leftQuantitative != null){ Iterator<Vector<Quantitative>> iterLeftQuanti = leftQuantitative.iterator(); while(iterLeftQuanti.hasNext()){ //OR Vector<Quantitative> disjunctElement = iterLeftQuanti.next(); Iterator<Quantitative> iter = disjunctElement.iterator(); while(iter.hasNext()){ //AND Quantitative ruleElement = (Quantitative) iter.next(); int index = csvParser.ObtenirIndiceChamp(ruleElement.getM_name()); if (Float.parseFloat(csvParser.m_data[line][index]) >= ruleElement.getM_lower() && Float.parseFloat(csvParser.m_data[line][index]) <= ruleElement.getM_upper()) running = true; else { running = false; break; } } if (running == true) break; //jump out of OR } } if (!running) continue; if (rightQuantitative != null){ Iterator<Vector<Quantitative>> iterRightQuanti = rightQuantitative.iterator(); while(iterRightQuanti.hasNext()){ //OR Vector<Quantitative> disjunctElement = iterRightQuanti.next(); Iterator<Quantitative> iter = disjunctElement.iterator(); while(iter.hasNext()){ //AND Quantitative ruleElement = (Quantitative) iter.next(); int index = csvParser.ObtenirIndiceChamp(ruleElement.getM_name()); if (Float.parseFloat(csvParser.m_data[line][index]) >= ruleElement.getM_lower() && Float.parseFloat(csvParser.m_data[line][index]) <= ruleElement.getM_upper()) running = true; else { running = false; break; } } if (running == true) break; //jump out of OR } } if (running){ countline++; //for (int i = 0; i < (label.size()-1); i++){ // System.out.println("*****************"+csvParser.m_data[line][csvParser.ObtenirIndiceChamp(label.get(i))]+ "************"); try { for (int j = 0; j < csvParser.ObtenirNombreChamps()-1; j++){ //csvPrinter.write(csvParser.m_data[line][csvParser.ObtenirIndiceChamp(label.get(i))]); csvPrinter.write(csvParser.m_data[line][j]); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //} try { //System.out.println("###########"+csvParser.m_data[line][csvParser.ObtenirIndiceChamp(label.get(label.size()-1))]+ "##########"); //csvPrinter.writeln(csvParser.m_data[line][csvParser.ObtenirIndiceChamp(label.get(label.size()-1))]); csvPrinter.writeln(csvParser.m_data[line][csvParser.ObtenirNombreChamps()-1]); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(); } }//END OF FOR LOOP try { csvPrinter.close(); } catch (IOException e) { e.printStackTrace(); } } //once switch to another rule, update the rule index and repaint private void jScrollBarReglesAdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {//GEN-FIRST:event_jScrollBarReglesAdjustmentValueChanged int iIndiceRegle = 0; iIndiceRegle = evt.getValue(); IndiquerRegleCourante( iIndiceRegle ); }//GEN-LAST:event_jScrollBarReglesAdjustmentValueChanged // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonCopy; private javax.swing.JButton jButtonSauver; private javax.swing.JButton jButtonVoirContexte; private javax.swing.JScrollBar jScrollBarRegles; private javax.swing.JScrollPane jScrollRegles; //the third part of the result panel private javax.swing.JTextField jTextNumeroRegle; // allows the editing of a single line of text private javax.swing.JButton jButtonExtractRows; //extract rows for a specific rule // End of variables declaration//GEN-END:variables //Display rules, the third panel private RuleBrowser m_afficheurRegles = null; //The middle panel private PanelSort m_panneauTri = null; private int m_iNombreReglesTotales = 0; private int m_iIndexCurrentRule = 0; private int m_iNombreReglesRetenues = 0; private AssociationRule [] m_tReglesFiltrees = null; // Indique qu'on a appuy� sur le bouton d'affichage du filtre : public void IndiquerModificationAffichageFiltre() { ArrangerDisposition(); } // Met � jour la liste des r�gles en appliquant les param�tres de tri et de filtrage : public void MettreAJourListeRegles() { ArrayList listeTempRegles = null; int iIndiceRegle = 0; AssociationRule regle = null; Comparator comparateur = null; boolean bTriDecroissant = false; float fSeuilMaxSupportDroite = 0.0f; int iNombreMaxOccurrencesDroite = 0; if (super.m_contexteResolution.m_listeRegles == null) return; // Prise en compte des informations entr�es pour le tri et le filtrage : super.m_contexteResolution.MettreAJourDonneesInternesFiltre_Filtrage(); fSeuilMaxSupportDroite = m_panneauTri.ObtenirSueilMaxSupportConsequent(); iNombreMaxOccurrencesDroite = super.m_contexteResolution.m_gestionnaireBD.ObtenirNombreLignes(); if (fSeuilMaxSupportDroite >= 0.0f) iNombreMaxOccurrencesDroite = (int)(((double)iNombreMaxOccurrencesDroite)*((double)fSeuilMaxSupportDroite)); listeTempRegles = new ArrayList(); m_iNombreReglesTotales = super.m_contexteResolution.m_listeRegles.size(); m_iNombreReglesRetenues = 0; for (iIndiceRegle=0; iIndiceRegle<m_iNombreReglesTotales; iIndiceRegle++) { regle = (AssociationRule)super.m_contexteResolution.m_listeRegles.get(iIndiceRegle); if (super.m_contexteResolution.EstRegleValide_Filtrage(regle)) if (regle.m_iOccurrencesDroite <= iNombreMaxOccurrencesDroite) { listeTempRegles.add(regle); m_iNombreReglesRetenues++; } } // Copie d�finitive dans le tableau des r�gles filtr�es : m_tReglesFiltrees = null; if (m_iNombreReglesRetenues > 0) { m_tReglesFiltrees = new AssociationRule[1]; m_tReglesFiltrees = (AssociationRule [])(listeTempRegles.toArray(m_tReglesFiltrees)); // Tri des r�gles : bTriDecroissant = m_panneauTri.EstTriDecroissant(); switch ( m_panneauTri.ObtenirMethodeTri() ) { case PanelSort.METHODE_TRI_SUPPORT: comparateur = AssociationRule.ObtenirComparateurSupport(bTriDecroissant); break; case PanelSort.METHODE_TRI_NOMBRE_ATTRIBUTS: comparateur = AssociationRule.ObtenirComparateurNombreAttributs(bTriDecroissant); break; default : comparateur = AssociationRule.ObtenirComparateurConfiance(bTriDecroissant); } Arrays.sort(m_tReglesFiltrees, comparateur); } // On d�clare le nouveau tableau des r�gles filtr�es et tri�es : m_afficheurRegles.DefinirListeRegles(m_tReglesFiltrees); if (m_iNombreReglesRetenues > 0) jScrollBarRegles.setMaximum(m_iNombreReglesRetenues-1); else jScrollBarRegles.setMaximum(0); if (m_iNombreReglesRetenues > 0) IndiquerRegleCourante(0); else IndiquerRegleCourante(-1); } //the index of the rule --middle part public void IndiquerRegleCourante(int iIndiceRegleCourante) { String sTexteNumeroRegleCourante = null; m_iIndexCurrentRule = iIndiceRegleCourante; if ( (iIndiceRegleCourante >= 0) && (m_iNombreReglesRetenues>0) ) { sTexteNumeroRegleCourante = "Rule "; sTexteNumeroRegleCourante += String.valueOf(iIndiceRegleCourante+1); sTexteNumeroRegleCourante += "/"; sTexteNumeroRegleCourante += String.valueOf(m_iNombreReglesRetenues); sTexteNumeroRegleCourante += " (total : "; sTexteNumeroRegleCourante += String.valueOf(m_iNombreReglesTotales); sTexteNumeroRegleCourante += ")"; } else sTexteNumeroRegleCourante = "No rule selected"; jTextNumeroRegle.setText(sTexteNumeroRegleCourante); //at the same time, repaint the third part to match with the current index of rule!!! m_afficheurRegles.DefinirIndiceRegleAffichee(iIndiceRegleCourante); } public AssociationRule ObtenirRegleCourante() { int iIndiceRegleCourante = 0; iIndiceRegleCourante = m_afficheurRegles.ObtenirIndiceRegleAffichee(); if ( (m_tReglesFiltrees != null) && (iIndiceRegleCourante >= 0) && (m_iNombreReglesRetenues>0) ) return m_tReglesFiltrees[iIndiceRegleCourante]; else return null; } void ArrangerDisposition() { int iDeltaPosX = 0; // Diff�rence de positionnement horizontal entre la position id�ale et celle de l'�diteur de formulaires int iDeltaPosY = 0; // Diff�rence de positionnement vertical entre la position id�ale et celle de l'�diteur de formulaires super.ArrangerDisposition(); iDeltaPosX = jButtonSauver.getX() - super.m_zoneControles.x; iDeltaPosY = jButtonSauver.getY() - super.m_zoneControles.y; jButtonSauver.setLocation(jButtonSauver.getX()-iDeltaPosX, jButtonSauver.getY()-iDeltaPosY); jButtonVoirContexte.setLocation(jButtonVoirContexte.getX()-iDeltaPosX, jButtonVoirContexte.getY()-iDeltaPosY); if (m_panneauTri.EstFiltreAffiche()) m_panneauTri.setBounds( super.m_zoneControles.x, jButtonSauver.getY()+jButtonSauver.getHeight()+10, super.m_zoneControles.width, super.m_zoneControles.height/2); else m_panneauTri.setBounds( super.m_zoneControles.x, jButtonSauver.getY()+jButtonSauver.getHeight()+10, super.m_zoneControles.width, m_panneauTri.ObtenirTailleReduite()); m_panneauTri.ArrangerDisposition(); jTextNumeroRegle.setBounds( jTextNumeroRegle.getX()-iDeltaPosX, m_panneauTri.getY()+m_panneauTri.getHeight()+10, jTextNumeroRegle.getWidth(), jTextNumeroRegle.getHeight()); jButtonExtractRows.setBounds( super.m_zoneControles.width+super.m_zoneControles.x - (jButtonExtractRows.getWidth()), jTextNumeroRegle.getY(), jButtonExtractRows.getWidth(), jButtonExtractRows.getHeight()); jButtonCopy.setBounds( jButtonExtractRows.getX()-jButtonCopy.getWidth(), jTextNumeroRegle.getY(), jButtonCopy.getWidth(), jButtonCopy.getHeight()); jScrollBarRegles.setBounds( jScrollBarRegles.getX()-iDeltaPosX, jTextNumeroRegle.getY(), jButtonCopy.getX() - 2 - (jScrollBarRegles.getX()-iDeltaPosX), jScrollBarRegles.getHeight()); jScrollRegles.setBounds( super.m_zoneControles.x, jTextNumeroRegle.getY()+jTextNumeroRegle.getHeight()+2, super.m_zoneControles.width, super.m_zoneControles.height+super.m_zoneControles.y-(jTextNumeroRegle.getY()+jTextNumeroRegle.getHeight()+2)); jScrollRegles.validate(); m_afficheurRegles.setPreferredSize( jScrollRegles.getViewport().getExtentSize()); m_afficheurRegles.revalidate(); m_afficheurRegles.DefinirDimensionConteneur(jScrollRegles.getWidth(), jScrollRegles.getHeight()); m_afficheurRegles.repaint(); } }