2017-10-04 6 views
0

j'ai écrit le code ci-dessous pour faire une nouvelle JTable quand je fais une sélection sur la JTable actuelle:Créer un nouveau JTable à partir d'une sélection d'un autre JTable?

makeTbale.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e){ 

    int[] selectedCols = table.getSelectedColumns(); 
    Object[] newCols = new Object[selectedCols.length]; 
    TableModel model = table.getModel(); 
    int selectedRows = model.getRowCount(); 
    Object[][] output = new Object[selectedCols][selectedRows]; 
    for(int nCol = 0; nCol < selectedCols.length; nCol++) { 
     for{int nRow = 0; nRow<selectedRows;nRow++) { 
     output[nCol][nRow] = model.getValueAt(nRow, selectedCols[nCol]).toString(); 
     newCols[nCol] = table.getModel().getColumnName(selectedCols[nCol]); 
     } 
    } 
    table.setModel(new DefaultTableModel(output,newCols)); 
}); 

Maintenant, ce sont les données que je sélectionne:

Col2  |Col3  |Col5  |Col6  |Col7  |Col10 
1/1/2017 |3.45  |1.2  |hello |b1_133 |test 
1/2/2017 |3.11  |4.9  |x  |b3_122 |you 
1/3/2013 |2.98  |5.5  |ask  |c1_001 |foo 
1/4/2012 |1.90  |2.1  |y  |v7_670 |hey 
1/6/2000 |9.99  |7.77  |w  |c3_890 |fee 
1/7/2012 |10.45 |8.75  |test  |u0_998 |faa 
. 
. 
. 

Il descend à 100 plus de lignes.

Voici le tableau que je reçois après l'exécution de mon code:

Col2  |Col3  |Col5  |Col6  |Col7  |Col10 
1/1/2017 |1/2/2017 |1/3/2013 |1/4/2012 |1/6/2000 |1/7/2012 
3.45  |3.11  |2.98  |1.90  |9.99  |10.45 
1.2  |4.9  |5.5  |2.1  |7.77  |8.75 
hello |x  |ask  |y  |w  |test 
. 
. 
. 

Vous avez l'idée, les colonnes sélectionnées sont maintenant les lignes et les lignes sont des colonnes et seulement 6 lignes sont visionnées (égal au le nombre de colonnes?).

Où est l'erreur dans mon code?

Répondre

1

La ligne/les colonnes du tableau ont été permutées. Vous avez donc mélangé vos index de tableau.

changement

output[nCol][nRow] = model.getValueAt(nRow, selectedCols[nCol]).toString(); 

à

output[nRow][nCol] = model.getValueAt(nRow, selectedCols[nCol]).toString(); 

et changer les index sur cette ligne:

Object[][] output = new Object[selectedCols][selectedRows]; 
+0

C'est ce que je pensais! Mais quand je le fais, j'obtiens une erreur d'exécution disant que l'index de tableau est hors limites: 6 – Abdane

+0

Vous pourriez également avoir vos boucles for à l'envers, puisque vous avez plus de lignes que de colonnes, si vous les mélangez, alors essayez de mettre plus de lignes dans les colonnes que vous avez l'espace de la colonne – dahui

+0

Essayez la boucle for à selectedCols.length - 1 – dahui