2011-11-30 36 views
7

làm cách nào để thêm chú giải công cụ vào các hàng của JTable (Java Swing)? Các chú giải công cụ này phải chứa cùng một giá trị của hàng tương đối.Cách thêm chú giải công cụ vào các hàng của JTable

Đây là mã tôi đã sử dụng trong lớp học mở rộng JTable. Nó ghi đè phương thức "preparRenderer", nhưng tôi có các ô trống và thêm chú giải công cụ cho mỗi ô trong hàng, không phải một chú giải công cụ cho toàn bộ hàng (đó là những gì tôi đang tìm):

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

Bạn có cần so sánh giữa comp và jcomp? Tôi nghĩ rằng nó sẽ luôn luôn hoạt động hoặc không bao giờ làm việc ... – BenCole

+0

"cùng một giá trị của hàng tương đối" Điều đó có nghĩa là gì? – kleopatra

Trả lời

14

nó thêm một tooltip cho mỗi tế bào đơn trong thời hạn liên tiếp, không phải là một tooltip cho toàn bộ hàng

Bạn đang thay đổi các tooltip tùy theo hàng và cột. Nếu bạn chỉ muốn chú giải công cụ thay đổi theo hàng, thì tôi sẽ chỉ kiểm tra giá trị hàng và quên giá trị cột.

Một cách khác để đặt chú giải công cụ là ghi đè phương thức của JTable là getToolTipText(MouseEvent). Sau đó, bạn có thể sử dụng phương thức rowAtPoint(...) của bảng để lấy hàng và sau đó trả lại đầu công cụ thích hợp cho hàng.

+1

Cảm ơn bạn nó gần như hoàn hảo! Điều duy nhất còn thiếu là chú giải công cụ này kéo dài vài giây. Tôi muốn giữ nó hiển thị cho đến khi con trỏ chuột được di chuyển đi. Điều đó có thể không? – Randomize

+3

Điều này được kiểm soát bởi 'ToolTipManager'. Bạn có thể thay đổi giá trị bỏ qua. – camickr

2

xem JComponent.setToolTipText() - JComponent bạn muốn trên dữ liệu mỗi hàng là không phải là bảng, mà là trình kết xuất ô của dữ liệu, có quyền truy cập để định cấu hình JComponent cho mỗi ô được hiển thị.

+0

Cảm ơn câu trả lời. Tôi đã chỉnh sửa câu hỏi của mình với nhiều thông tin hơn. – Randomize

5

Chỉ sử dụng mã bên dưới khi tạo đối tượng 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 có thể là ZERO.

thay đổi:

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

bởi:

if(rowIndex >= 0){ 
    tip = getValueAt(rowIndex, colIndex).toString(); 
} 
Các vấn đề liên quan