Liên kết bên dưới là một bài viết xác định xem ô có hiển thị hay không. Bạn có thể sử dụng nó - nếu ô hiển thị, thì hàng có thể nhìn thấy được. (Nhưng tất nhiên, có thể không phải toàn bộ hàng, nếu cuộn ngang cũng có mặt.)
Tuy nhiên, tôi nghĩ điều này sẽ thất bại khi ô lớn hơn khung nhìn. Để xử lý trường hợp này, bạn thay đổi kiểm tra để kiểm tra xem đầu/cuối của giới hạn ô nằm trong phạm vi dọc của chế độ xem hay không, nhưng bỏ qua phần bên trái/phải của ô. Nó đơn giản nhất để thiết lập bên trái và chiều rộng của hình chữ nhật thành 0. Tôi cũng đã thay đổi phương thức để chỉ chỉ số hàng (không cần chỉ mục cột) và nó trả về true
nếu bảng không nằm trong khung nhìn, có vẻ như để phù hợp hơn với trường hợp sử dụng của bạn.
public boolean isRowVisible(JTable table, int rowIndex)
{
if (!(table.getParent() instanceof JViewport)) {
return true;
}
JViewport viewport = (JViewport)table.getParent();
// This rectangle is relative to the table where the
// northwest corner of cell (0,0) is always (0,0)
Rectangle rect = table.getCellRect(rowIndex, 1, true);
// The location of the viewport relative to the table
Point pt = viewport.getViewPosition();
// Translate the cell location so that it is relative
// to the view, assuming the northwest corner of the
// view is (0,0)
rect.setLocation(rect.x-pt.x, rect.y-pt.y);
rect.setLeft(0);
rect.setWidth(1);
// Check if view completely contains the row
return new Rectangle(viewport.getExtentSize()).contains(rect);
}
Vâng, giải pháp này ít nhất đã đưa tôi vào con đường bên phải, đây là những gì làm việc cho tôi: JViewport viewport = scrollPane1.getViewport(); Rectangle rect = myTable.getCellRect (rowToSelect, 1, true); nếu (! Viewport.contains (rect.getLocation())) myTable.scrollRowToVisible (rowToSelect); . . . Cảm ơn rất nhiều – Brad