2013-08-20 43 views
6

Tôi cần phải hủy bỏ tất cả các lựa chọn trong một đối tượng mô hình JTable. Java cung cấp chức năng này "clearSelection()", những gì tôi cần, theo như tôi hiểu.JTable.clearSelection() vs Jtable.getSelectionModel.clearSelection() - Khi nào nên sử dụng cái gì?

Nhưng tôi bối rối tại sao chức năng này có thể được gọi trên đối tượng JTable cũng như trên một mô hình lựa chọn cho một đối tượng JTable:

1) mytable.clearSelection(); 
2) mytable.getSelectionModel().clearSelection(); 

Cả hai cách làm việc, nhưng tôi không hiểu những gì một tình huống clearSelection() của một SelectionModel (như ở 2)) sẽ có ý nghĩa. Theo như tôi đã hiểu SelectionModels, chúng được sử dụng để quyết định loại lựa chọn nào mà JTable cho phép. Tôi sử dụng SelectionModel để chỉ cho phép Lựa chọn chính xác một hàng

//allow only one row to be selected 
mytable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

Cách nào được ưu tiên trong loại tình huống nào? Có lý do chính đáng nào để không sử dụng cách 1 không?

Tôi sẽ rất vui nếu có ai đó có một số giải thích thân thiện với người mới bắt đầu cho điều đó. Thx trước.

+0

Có lẽ nó sử dụng mô hình mặc định khi bạn gọi table.clearSelection(), nhưng đó chỉ là phỏng đoán! – Fernando

Trả lời

7

Đây là việc thực hiện JTable#clearSelection()

public void clearSelection() { 
    selectionModel.clearSelection(); 
    columnModel.getSelectionModel().clearSelection(); 
} 

Như bạn thấy, có hai ListSelectionModel đó sẽ bị xóa, bởi vì bạn có thể chọn cột và/hoặc hàng và/hoặc di động.

Từ Oracle hướng dẫn:

JTable sử dụng một khái niệm rất đơn giản về lựa chọn, quản lý như một ngã tư các hàng và cột. Nó không được thiết kế để xử lý đầy đủ các lựa chọn ô độc lập .

A ListSelectionModel xử lý tất cả các khía cạnh của lựa chọn như hàng nào được chọn, làm cách nào chúng tôi có thể chọn một số hàng, v.v ... Không chỉ loại lựa chọn!
biết thêm thông tin trong the Oracle JTable tutorial

+0

Cảm ơn bạn đã giải thích loại của bạn. Vì vậy, nếu tôi đã cho bạn quyền, selectionModel.clearSelection() xóa lựa chọn các hàng và columnModel.getSelectionModel(). ClearSelection() xóa lựa chọn các cột, để cả hai cùng nhau sẽ xóa một lựa chọn trên một tế bào, chính xác? Kể từ khi bạn khám phá, tôi đã có cảm giác rằng việc gọi mytable.clearSelection() được ưu tiên là mytable.getSelectionModel(). ClearSelection(), vì nó thực hiện thanh toán bù trừ rộng hơn. Cảm ơn bạn đã gợi ý về ListSelectionModel. – Simeon

+0

@Simeon Nó phải là một cái gì đó như thế, ngoại trừ tôi nghĩ rằng chỉ rõ ràng việc lựa chọn các cột (hoặc hàng) là đủ để bỏ chọn một ô. (nếu không có hàng nào được chọn, cách một ô có thể được chọn. Cùng một lý do với cột). Vui mừng được hữu ích;) – NiziL

5

Thông thường khi bạn nhìn thấy hai phương pháp như vậy đó là vì bảng sẽ gọi phương thức SelectionModel.clearSelection() cho bạn. Vì vậy, phương pháp bảng là một phương pháp tiện lợi.

Trong trường hợp này mã thực tế là:

public void clearSelection() 
{ 
    selectionModel.clearSelection(); 
    columnModel.getSelectionModel().clearSelection(); 
} 

Vì vậy, cả hai hàng và lựa chọn cột mô hình sẽ bị xóa.

Các vấn đề liên quan