2016-04-10 7 views
1

Ich habe ein JScrollPane in zwei Jpanel s geteilt, wie Sie im Bild sehen kann:Bar Klicken Sie auf und wählen Sie den entsprechenden JTabel Datensatz

enter image description here

Auf der rechten Seite gibt es eine JTable mit drei Spalten ist. Auf der linken Seite ist das entsprechende Histogramm mit JFreeChart API erstellt.
Ich muss einen Listener auf dem Histogramm implementieren, um sicherzustellen, dass, wenn man auf einen Balken drückt, der entsprechende Eintrag in der JTable auf der linken Seite ausgewählt wird.

Um mein Ziel ich Umsetzung dieser Hörer zu erreichen:

chartPanel.addChartMouseListener(new ChartMouseListener() { 

     @Override 
     public void chartMouseMoved(ChartMouseEvent arg0) { 
     } 

     @Override 
     public void chartMouseClicked(ChartMouseEvent arg0) { 

      try{ 
      TableModel model = table.getModel();  
      CategoryItemEntity entity = (CategoryItemEntity) arg0.getEntity(); 
      Comparable row = entity.getRowKey(); 
      Comparable col = entity.getColumnKey(); 
      System.out.println(String.valueOf(row)); 
      String field = String.valueOf(col); 

       for(int i = 0; i<model.getRowCount(); i++) { 
        if(model.getValueAt(i, 0).equals(field)) { 
         table.changeSelection(i, 0, false, false); 

        } 
       } 
      } 
      catch (Exception e) { 
       System.out.println("No bars selected"); 
      } 


     } 
    }); 

Dieser Listener arbeitet korrekt, bis man die JTable indem Sie auf den Header bestellt. Wenn Sie beispielsweise die JTable gemäß Number of occurrences bestellen, entspricht die ausgewählte Zeile in JTable nicht der angeklickten Leiste, wenn Sie auf eine Leiste des Histogramms drücken.

--- Bearbeiten

Wenn man eine Bar drückt, ich habe das Ende des entsprechenden Datensatz in der JTable zu ausgewählten. Zum Beispiel drückt man „Bronx“ bar annehmen:

enter image description here

Mein Code funktioniert einwandfrei, bis man die JTable indem Sie auf dem Header-Feld (Gemeinde, Typ, Anzahl der Vorkommen) bestellt.

+0

ich meine Frage bearbeitet. – DistribuzioneGaussiana

Antwort

3

Sie müssen die Ansichtszeilennummer in die exakte Zeilennummer konvertieren.

Sie können dies tun, indem sie:

int realRowNumber = table.convertRowIndexToModel(viewRowIndex); 
Verwandte Themen