Tôi có một bảng nơi mỗi hàng đại diện cho một bức tranh. Trong cột Path I lưu trữ đường dẫn tuyệt đối của nó. Các chuỗi được kinda dài, tôi muốn rằng khi tôi di chuột qua các tế bào cụ thể, một tooltip nên bật lên bên cạnh con chuột có chứa các thông tin từ các tế bào.Cách thêm chú giải công cụ vào ô trong jtable?
Trả lời
Tôi cho rằng bạn không viết tùy chỉnh CellRenderer
cho đường dẫn mà chỉ sử dụng DefaultTableCellRenderer
. Bạn nên phân lớp DefaultTableCellRenderer
và đặt chú giải công cụ trong getTableCellRendererComponent
. Sau đó đặt trình kết xuất cho cột.
class PathCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
JLabel c = (JLabel)super.getTableCellRendererComponent(// params from above);
// This...
String pathValue = <getYourPathValue>; // Could be value.toString()
c.setToolTipText(pathValue);
// ...OR this probably works in your case:
c.setToolTipText(c.getText());
return c;
}
}
...
pathColumn.setCellRenderer(new PathCellRenderer()); // If your path is of specific class (e.g. java.io.File) you could set the renderer for that type
...
Bạn nói rằng bạn lưu trữ một đường dẫn tuyệt đối trong một ô. Có thể bạn đang sử dụng một số JLabel
để đặt chuỗi đường dẫn tuyệt đối. Giả sử bạn có một nhãn trong di động của bạn, sử dụng các thẻ html để thể hiện nội dung tooltip:
JLabel label = new JLabel("Bla bla");
label.setToolTipText("<html><p>information about cell</p></html>");
setToolTipText()
có thể được sử dụng cho một số thành phần Swing khác nếu bạn đang sử dụng một cái gì đó khác hơn JLabel.
deffinetly nope ... –
* "deffinetly nope" * Tôi tự hỏi nếu @deporter hiểu nhận xét đó. Tôi chắc chắn không. :( –
xin vui lòng chính xác hơn một chút: _have một nhãn trong cell_ của bạn có thể gây hiểu lầm (không nên có thành phần trong tế bào, bao giờ) Thay vào đó nó là một nhãn được cung cấp bởi một renderer như ... cũng .. rendering thành phần: -) – kleopatra
Chỉ cần sử dụng bên dưới mã trong khi tạo ra các đố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 {
tip = getValueAt(rowIndex, colIndex).toString();
} catch (RuntimeException e1) {
//catch null pointer exception if mouse is over an empty line
}
return tip;
}
};
Thực ra, tôi nghĩ nó hiệu quả hơn giải pháp được chấp nhận. –
Điều này có thể không hoạt động khi chúng tôi sắp xếp bảng dựa trên một số cột. –
Sử dụng 'getRowSorter(). ConvertRowIndexToModel (rowIndex)' và 'getRowSorter(). ConvertRowIndexToModel (rowIndex)' để lấy hàng chính xác từ mô hình. –
Bạn không thể gọi super.getTableCellRendererComponent. – codenamezero
@codenamezero Tại sao không? Bạn biết rằng trong mã mẫu tôi đã phân lớp 'DefaultTableCellRenderer' có phương thức theo kiểu không trừu tượng và bản thân nó là một' JLabel'? –