2011-09-26 3 views
2

Observation ::Comment rendre le volet de défilement statique?

Chaque fois que l'utilisateur atteint la dernière cellule de la table et appuie sur la touche de tabulation, le focus est déplacé vers la première cellule, c'est-à-dire vers le haut de la table.

A ramené la vue de table à la dernière cellule en utilisant la fonction table.scrollRectToVisible (rect), mais en raison de cela il y a un mouvement et il semble qu'il y ait un faux changement dans les valeurs de la table. Le scénario: Si j'ai rendu statique le panneau de défilement de façon à ce que je puisse contrôler le mouvement. Comment rendre cela possible ..

Merci Vous à l'avance ...

Répondre

4

L'approche de base consiste à envelopper l'action de navigation par défaut de la table dans une action personnalisée qui vérifie la cellule actuelle: si elle est la dernière, faire rien sinon d'exécuter l'action enveloppé

exemple de code:

Object key = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) 
     .get(KeyStroke.getKeyStroke("ENTER")); 
    final Action action = table.getActionMap().get(key); 
    Action custom = new AbstractAction("wrap") { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // implement your prevention logic 
      // here: don't perform if the current cell focus is the very cell of the table 
      int row = table.getSelectionModel().getLeadSelectionIndex(); 
      if (row == table.getRowCount() - 1) { 
       int column = table.getColumnModel().getSelectionModel().getLeadSelectionIndex(); 
       if (column == table.getColumnCount() -1) { 
        // if so, do nothing and return 
        return; 
       } 
      } 
      // if not, call the original action 
      action.actionPerformed(e); 
     } 

    }; 
    table.getActionMap().put(key, custom); 
+1

+1 pour réutiliser l'action par défaut. – camickr

Questions connexes