2011-11-30 8 views
7

Jak dodać podpowiedzi do wierszy JTable (Java Swing)? Te etykiety narzędzi powinny zawierać te same wartości względnego wiersza.Jak dodać podpowiedzi do wierszy JTable

To jest kod użyty w mojej klasie, który rozszerza JTable. To przesłania metodę „prepareRenderer”, ale mam puste komórki, a to dodaje podpowiedź dla każdej pojedynczej komórki w wierszu, nie jedna podpowiedź dla całego rzędu (to właśnie szukam):

public Component prepareRenderer(TableCellRenderer renderer,int row, int col) { 
    Component comp = super.prepareRenderer(renderer, row, col); 
    JComponent jcomp = (JComponent)comp; 
    if (comp == jcomp) { 
     jcomp.setToolTipText((String)getValueAt(row, col)); 
    } 
    return comp; 
} 
+1

Czy potrzebujesz porównania między poglądowy i jcomp? Myślę, że albo zawsze będzie działać, albo nigdy nie zadziała ... – BenCole

+0

"te same wartości względnego rzędu" Co to znaczy? – kleopatra

Odpowiedz

14

dodaje podpowiedź dla każdej pojedynczej komórki w wierszu, a nie jeden podpowiedzi dla całego rzędu

Zmieniasz podpowiedź w zależności od wiersza i kolumny. Jeśli chcesz zmienić etykietkę tylko według wiersza, sprawdziłbym tylko wartość wiersza i zapomnę o wartości kolumny.

Innym sposobem ustawienia etykiety narzędziowej jest zastąpienie metody JTable za pomocą metody getToolTipText(MouseEvent). Następnie możesz skorzystać z metody tabeli rowAtPoint(...), aby uzyskać wiersz, a następnie zwrócić odpowiednią końcówkę narzędzia dla wiersza.

+1

Dziękujemy, że jest prawie idealny! Jedyne, czego brakuje, to że podpowiedź trwa kilka sekund. Chciałbym, aby był wyświetlany do momentu, aż wskaźnik myszy zostanie przesunięty. Czy to jest możliwe? – Randomize

+3

To jest kontrolowane przez 'ToolTipManager'. Możesz zmienić wartość odwołania. – camickr

2

- JComponent, którego chcesz danych w wierszach, to , a nie tabelę, ale raczej mechanizm renderujący komórki danych, który ma dostęp do konfiguracji JComponent dla każdej renderowanej komórki.

+0

Dzięki za odpowiedź. Zmieniłem moje pytanie z dodatkowymi informacjami. – Randomize

5

Po prostu użyj poniższego kodu podczas tworzenia obiektu JTable.

JTable auditTable = new JTable(){ 

      //Implement table cell tool tips.   
      public String getToolTipText(MouseEvent e) { 
       String tip = null; 
       java.awt.Point p = e.getPoint(); 
       int rowIndex = rowAtPoint(p); 
       int colIndex = columnAtPoint(p); 

       try { 
        //comment row, exclude heading 
        if(rowIndex != 0){ 
         tip = getValueAt(rowIndex, colIndex).toString(); 
        } 
       } catch (RuntimeException e1) { 
        //catch null pointer exception if mouse is over an empty line 
       } 

       return tip; 
      } 
     }; 
0

rowIndex może być ZERO.

zmiana:

if(rowIndex != 0){ 
    tip = getValueAt(rowIndex, colIndex).toString(); 
} 

przez:

if(rowIndex >= 0){ 
    tip = getValueAt(rowIndex, colIndex).toString(); 
} 
Powiązane problemy