اقلب التحديد في JTable
سؤال
عند النقر فوق زر ، أريد أن يتم قلب الصفوف المحددة (يجب تحديد الصفوف غير المحددة ويجب أن تكون الصفوف المحددة غير محددة).
هل هناك طريقة بناء في JTable للقيام بذلك؟
المحلول
لا يبدو أن Jtable لديه طريقة مدمجة للقيام بذلك. لذلك قمت بتطبيقه مع الكود التالي. (آمل أن يكون هذا مفيدًا لشخص يواجه مشكلة مماثلة.)
int[] selectedIndexs = jtable.getSelectedRows();
jtable.selectAll();
for (int i = 0; i < jtable.getRowCount(); i++) {
for (int selectedIndex : selectedIndexs) {
if (selectedIndex == i) {
jtable.removeRowSelectionInterval(i, i);
break;
}
}
}
نصائح أخرى
لتبسيط حل سودار:
int[] selectedIndices = table.getSelectedRows();
table.selectAll();
for (int prevSel : selectedIndices) {
table.removeRowSelectionInterval(prevSel, prevSel);
}
JTable ليس لديه هذه الميزة
لا ، سيتعين عليك تنفيذ cutsom ListSelectionListener
يتم صقل إلى أعلاه هو تحديث التحديد باستخدام كائن نموذج التحديد ، وليس كائن الجدول. عند تحديث التحديد عبر الجدول ، يقوم كل تحديث بإطلاق حدث تغيير في التحديد ويستغرق تحديث جدول مع بضع مئات من الصفوف.
أسرع طريقة للجداول التي تحتوي على أكثر من بضع مئات من الصفوف
/**
* Invert selection in a JTable.
*
* @param table
*/
public static void invertSelection(JTable table) {
ListSelectionModel mdl = table.getSelectionModel();
int[] selected = table.getSelectedRows();
mdl.setValueIsAdjusting(true);
mdl.setSelectionInterval(0, table.getRowCount() - 1);
for (int i : selected) {
mdl.removeSelectionInterval(i, i);
}
mdl.setValueIsAdjusting(false);
}
لا تنتمي إلى StackOverflow