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

Composants Java Discussion :

[JXTable] Probleme lors d'insert filtres


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 90
    Par défaut [JXTable] Probleme lors d'insert filtres
    Bonjour à tous,

    Je travaille sur une JXTable et je rencontre un problème que je n'arrive pas à contourner : j'aurais donc besoin de vos lumières s'il vous plait Je vais essayer de détailler au maximum. N'hésitez pas à me dire d'en rajouter au besoin,

    En fait le problème vient des filtres puisque lorsque je les désactive : l'insert fonctionne correctement.

    En gros, lorsque j'insère une nouvelle row en cliquant sur le bouton, la nouvelle ligne est bien ajoutée dans le modèle mais n'apparait pas dans la vue : le "rowModel" ci dessous en correct mais le "rowView" ne l'est pas. Pourtant je désactive bien mes filtres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if (action.getSource() == _insertButton)
    {
    	   _controler.addRow(_filterPanel.getFilterColumns());
           	  int rowModel =_table.getModel().getRowCount() - 1;
    	  int rowView = _filters.convertRowIndexToView(rowModel);
    	  int colEditable = getNextCellEditable(rowView,0);
    	  if  (rowView == -1)
    	 {
                 ErrorPopup.getInstance().showWarning("Row" + rowModel +  " can not be displayed");
    	}
    }
    Donc ensuite au niveau de l'ajout dans le modèle cela se passe très simplement comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void addRow(LinkedHashMap<Integer, Object> linkedHashMap) 
    {
     	//add a new Vector
    	ArrayList<Object> newRow = new ArrayList<Object>(_columns.size());
    	// set defaultValue to the vector
    	int size = _data.size();
    	_data.add(size,newRow);
    	setDefaultRowValue(linkedHashMap);
     
    	fireTableDataChanged();
    }
    donc si je désactive les "filtres", que je vais détailler en dessous : aucun problème. Mais dès qu'il y a une ligne vide : c'est le drame

    Mes filtres sont visuellement construit comme une liste de panel contenant chacun un bouton, un text et une combobox avec la liste des colonnes. Après quand l'user clique sur le bouton, le filtre est appliqué. (maximum de 5 panels).

    Si j'ai bien compris le système des filtres avec la JTable : je crée mes 5 filtres à l'init de ma JTable que je relie à une pipeline, que je relie à ma table. Tout ça une seule et unique fois.
    Lorsqu'un filtre change, je joue avec filter.refresh() et je set la colonne à 0, ainsi que le pattern. Est ce que je fais bien ou j'ai raté quelque chose ?

    Mes filtres, hors insert, fonctionne relativement bien et ne me posent pas (encore) de problème donc j'ai sans doute fait une erreur à l'init.

    Voici ma classe panel qui contient chaque filtre. Elle est englobée par une autre classe qui contient la liste de ces 5 panels :

    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
     
    public class FilterPanelView extends JXPanel{
     
    	private JButton _button;
    	private JTextField _text;
    	private JComboBox _combo;
    	private boolean _isActivated;
    	private PatternFilter _filter;
     
    	public FilterPanelView(ArrayList<String> columns) 
    	{
    	 // Vizulation init	
              super();
    	  setLayout(new GridLayout(1,3));
    	 _button = new JButton(IconManipulation.getInstance().getNewRowIcon());
    	  _text = new JTextField();
             _combo = new JComboBox(columns.toArray());
    	 _text.setVisible(true);
    	 _combo.setBorder(BorderFactory.createEmptyBorder());
    	 _filter = new PatternFilter();
     	 add(_combo);
     	 add(_text);
    	 add(_button);
    	 _isActivated = false;
    	setVisible(true);
          }
     
    	public boolean actionPerformed() 
          {
           // When the user click to add the filter, else do nothing       
    	if (_isActivated == false)
    		{
    	 	_combo.setEditable(false);
    		_combo.setEnabled(false);
    	 	_text.setEnabled(false);
    		_isActivated = true;
    		if (_text.getText().equalsIgnoreCase(""))
    			_filter.setPattern("", 1);
    		 else
    			_filter.setPattern("^" +_text.getText() + "$", 1);
    			_filter.setColumnIndex(_combo.getSelectedIndex());
    			return true;
    		}
    		return false;
    	}
     
            /** Used to clear the filter to be reused
            */    
      	public void setEmptyPattern() {
     
    		_filter.setColumnIndex(0);
    		_filter.setPattern(".*",0);
    		_filter.refresh();
    		_text.setText("");
    		_combo.setEditable(true);
    		_combo.setEnabled(true);
    		_text.setEnabled(true);
    		  _button.setIcon(IconManipulation.getInstance().getNewRowIcon());
    		_isActivated = false;
    	}
    Bon j'ai élagué au maximum le code pour qu'il reste compréhensible, j'espère que c'est assez clair. Sinon, je serai ravie de redonner plus d'informations

    Merci beaucoup ,

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 90
    Par défaut
    Ahhh j'ai trouvé d'où ça venait.

    Le problème se pose quand j'ai des valeurs de ma table nulles ou vides (""). Apparemment, si un cellule est nulle, elle ne matche pas avec ".*".

    J'ai plus ou moins résolu mon problème, lors de l'insertion d'une nouvelle ligne, en changeant la valeur nulle par " ". Mais ça fausse un peu les valeurs (ca peut donner des résultats bizarres).

    Est ce que quelqu'un aurait une idée plus jolie ?

    Merci beaucoup de votre aide

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

Discussions similaires

  1. Probleme lors des insertions
    Par sadem dans le forum Entity Framework
    Réponses: 7
    Dernier message: 29/11/2011, 12h47
  2. [MySQL] problemes lors de l'insertion de données
    Par otari dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/06/2007, 17h55
  3. [XML] Probleme lors de l'insertion des données XML
    Par Lyna2007 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/03/2007, 16h26
  4. Réponses: 14
    Dernier message: 08/08/2006, 11h31
  5. [SYBASE] probleme lors d'un insert
    Par arioule dans le forum Sybase
    Réponses: 1
    Dernier message: 25/02/2005, 11h11

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