2017-10-03 2 views
0

J'ai donc écrit un code qui utilise MouseListener pour sélectionner/surligner des données dans un JTable. Je voudrais recadrer les données en surbrillance. Par exemple, je voudrais mettre en évidence la première colonne et la troisième colonne avec 20 lignes vers le bas, cliquez sur un bouton et faire un nouveau JTable avec les données en surbrillance. Ceci est ma méthode de MouseListener qui met en évidence les données:Comment recadrer une sélection de données dans JTable?

public void DataSelection(JTable table) { 
    JTable Table = table; 
    JTableHeader columnHeader = Table.getTableHeader(); 

    //***Row Selection***// 

    Table.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent mouseEvent) { 
     Table.setColumnSelectionAllowed(true); 
     Table.setRowSelectionAllowed(true); 

     if (Table.isCellSelected(Table.getSelectedRow(), 0)) { 
      Table.setColumnSelectionAllowed(false); 
      Table.setRowSelectionAllowed(true);      
     } 

    } 
    }); 

    //***Column Selection***// 

    columnHeader.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent mouseEvent) { 
     int columnPoint = columnHeader.columnAtPoint(mouseEvent.getPoint()); 

     Object columnCursorType = columnHeader.getCursor().getType(); 

     if (columnCursorType == Cursor.E_RESIZE_CURSOR) 
      mouseEvent.consume(); 
     else { 

      if (columnPoint == 0) 
       Table.selectAll(); 
      else { 
       Table.setColumnSelectionAllowed(true); 
       Table.setRowSelectionAllowed(false); 
       Table.clearSelection(); 
       Table.setColumnSelectionInterval(columnPoint, columnPoint); 
      } 

     } 
    } 
    }); 

} 
+1

bonne description du problème - maintenant ce que vous avez essayé? Montrez-nous votre tentative pour résoudre le problème (obtenir les lignes/colonnes sélectionnées dans une nouvelle table). Sinon, tout ce que nous pouvons/ferons, c'est commenter/critiquer votre sélection de ligne/colonne. – AJNeufeld

+0

@AJNeufeld Donc le bouton fait une nouvelle table, j'ai du mal à obtenir les valeurs de la sélection. Comment puis-je attribuer une nouvelle JTable aux valeurs de la sélection effectuée par le code que j'ai écrit ci-dessus? – Abdane

+0

Je suis coincé sur la façon dont j'obtiendrais les données en surbrillance dans un tableau 2D par exemple ou une liste 2D. – Abdane

Répondre

1

Donc, vous avez trois informations:

  • Les colonnes sélectionnées
  • Les lignes sélectionnées
  • Les données

Vous devez créer un moyen de les combiner pour produire une vue "recadrée" des données

Maintenant, vous « pourrait » filtrer les données directement et simplement des semences qui dans une nouvelle TableModel, mais je pense que le travail est plus est alors nécessaire

Au lieu de cela, je me concentrerais sur le filtrage directement le TableColumnModel et JTable.

JTableJTable prend déjà en charge le filtrage. Il vous suffit donc de concevoir un filtre personnalisé prenant en charge les plages de lignes. Commencez par jeter un oeil à How to use JTable: Sorting and Filtering pour plus de détails

Filtrer un TableColumnModel n'est pas si simple, puisqu'il n'y a pas de fonctionnalité intégrée pour cela, vous devrez le concevoir vous-même. Heureusement pour vous, beaucoup d'autres personnes ont eu cette exigence avant vous.

Par exemple:

Avec c'est la main, vous pouvez facilement créer un filtre TableModel et personnalisée TableRowFilter, passer les données existantes/TableModel à une nouvelle instance de JTable et appliquer le filtre TableModel et TableRowFilter

"Mais où est mon exemple exécutable?" vous dites - Eh bien, il n'y en a pas un, pourquoi? Parce que l'exigence globale est large, vous devez répondre à deux questions pour obtenir le résultat.

Cela dit, il y a beaucoup d'exemples liés qui vous fournira les informations de base dont vous avez besoin de trouver une solution de travail de votre