首頁  >  文章  >  Java  >  如何在 JTable 中允許非連續儲存格選擇?

如何在 JTable 中允許非連續儲存格選擇?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-23 08:26:36684瀏覽

How to Allow Non-Continuous Cell Selection in a JTable?

允許單一和非連續的JTable 單元格選擇

理解要求

任務是使用戶能夠選擇多個不連續的單元格JTable ,允許在連續單元格組之外進行更靈活的單元格選擇。

探索解決方案

1.利用 ListSelectionModel

JTable 的 setSelectionModel() 方法可讓您自訂選擇模型。透過設定為ListSelectionModel.SINGLE_SELECTION並新增監聽器來處理InputEvent.CTRL_MASK,可以實現非連續儲存格選擇。

2.自訂 MouseEvent 處理

透過重寫 JTable 中的 processMouseEvent() 方法,您可以修改事件的修飾符以指示按下了控制鍵。這樣,表格的行為就像使用者按住 Control 鍵一樣,啟用多個儲存格選擇。

3.實現自訂清單選擇模型

如果內建選擇模型不能滿足您的要求,您可以建立自己的ListSelectionModel 實現,以所需的方式管理單元格選擇。

4.範例實作

以下程式碼片段提供了一個SSCCE,它示範了允許在JTable 中進行非連續儲存格選擇的自訂processMouseEvent() 方法:

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class TableSelection extends JFrame {

    public TableSelection() {
        JPanel main = new JPanel();

        // Initialize table data
        String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};
        Object[][] data = {
            {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)},
            {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)},
            {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)},
            {"Jane", "White", "Speed reading", new Integer(20), new Boolean(true)},
            {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)}
        };

        // Override processMouseEvent to add control modifier
        JTable table = new JTable(data, columnNames) {
            @Override
            protected void processMouseEvent(MouseEvent e) {
                int modifiers = e.getModifiers() | InputEvent.CTRL_MASK;
                MouseEvent myME = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), modifiers, e.getX(),
                        e.getY(), e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger(), e.getButton());
                super.processMouseEvent(myME);
            }
        };
        JScrollPane pane = new JScrollPane(table);
        main.add(pane);
        this.add(main);
    }

    public static void main(String[] args) {
        new TableSelection();
    }
}

此實作允許您按住Ctrl鍵的同時點選所需的儲存格來選取不連續的儲存格。

以上是如何在 JTable 中允許非連續儲存格選擇?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn