」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 JTable 中啟用非連續儲存格選擇?

如何在 JTable 中啟用非連續儲存格選擇?

發佈於2024-11-16
瀏覽:236

How to Enable Non-Continuous Cell Selection in JTable?

在JTable中選擇不連續的單元格

在JTable中,預設的選擇模式只允許選擇連續的單元格。為了實現單獨的、非連續的小區選擇,可以考慮以下方法:

1。 CTRL MOUSE_CLICK:

如果未設定 setSelectionMode(ListSelectionModel.SINGLE_SELECTION),則在按一下儲存格時按住 CTRL 鍵可以選擇多個非連續儲存格。

2.修改後的ListSelectionModel:

由於ListSelectionModel是由JTable和JList共享的,因此可以使用以下修改後的ListSelectionModel:

import java.awt.Component;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class NonContSelectionModel extends DefaultListSelectionModel {

    @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);
    }
}

這個模型可以透過使用 setSelectionModel(new NonContSelectionModel()) 來應用於 JTable。

示範:

以下程式碼片段建立一個JTable 允許使用修改後的ListSelectionModel 進行非連續儲存格選擇:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

public class NonContJTableSelection {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel panel = new JPanel();
                String[] columnNames = {"Name", "Age", "Profession"};
                Object[][] data = {
                        {"John Doe", 30, "Software Engineer"},
                        {"Jane Doe", 28, "Doctor"},
                        {"Peter Jones", 45, "Lawyer"}
                };
                JTable table = new JTable(data, columnNames);
                table.setSelectionModel(new NonContSelectionModel());
                JScrollPane scrollPane = new JScrollPane(table);
                panel.add(scrollPane);

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
最新教學 更多>
  • 為什麼 Java NullPointerException 缺少 StackTrace?
    為什麼 Java NullPointerException 缺少 StackTrace?
    無法捕獲Java NullPointerException 中的StackTrace,且沒有可見錯誤在某些情況下,Java 程式碼擷取NullPointerException 但無法記錄StackTrace,這讓開發人員感到困惑,因為「顯示「java.lang.NullPointerExceptio...
    程式設計 發佈於2024-11-16
  • 如何動態更新設定檔中的字串?
    如何動態更新設定檔中的字串?
    操作動態內容的設定檔在建立動態設定的上下文中,管理設定檔變得至關重要。要將設定檔中的特定字串替換為動態變量,可以考慮以下幾種方法:結構化資料格式:建議使用結構化資料格式,例如CSV 、INI、XML、JSON 或YAML。每種格式都提供自己的 API 用於讀取和寫入資料。透過利用這些 API,您可以...
    程式設計 發佈於2024-11-16
  • 如何在 JavaScript 中優雅地刪除查詢字串參數?
    如何在 JavaScript 中優雅地刪除查詢字串參數?
    在 JavaScript 中優雅地刪除查詢字串參數使用 URL 時,通常需要操作查詢字串參數。一項常見任務是刪除特定參數。雖然正規表示式可以是一種解決方案,但它們可能容易出錯且不靈活。 更好的方法:解析與操作不要使用正規表示式,請考慮解析將查詢字串轉換為對象,對其進行操作,然後重建URL。這種方法有...
    程式設計 發佈於2024-11-16
  • 為什麼一個執行緒在notify()或notifyAll()之後總是重新取得物件鎖?
    為什麼一個執行緒在notify()或notifyAll()之後總是重新取得物件鎖?
    notify()和notifyAll()之間的微妙區別notify()和notifyAll()之間的主要區別在於它們喚醒的等待線程的數量(一個與所有),這提出了另一個問題:為什麼一個線程總是重新獲取對象lock? 一般情況下,notify()和notifyAll()都沒有指定選擇哪個等待執行緒重新取...
    程式設計 發佈於2024-11-16
  • 以下是一個符合文章內容的問答式英文標題:

How do I convert a NumPy array to a Python list?
    以下是一個符合文章內容的問答式英文標題: How do I convert a NumPy array to a Python list?
    Converting a NumPy Array to a Python ListNumPy arrays provide efficient data structures for numerical computations. However,有時需要將它們轉換為 Howeverical Pyt...
    程式設計 發佈於2024-11-16
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-16
  • Try-Except-Else 是 Python 中流量控制的有用工具嗎?
    Try-Except-Else 是 Python 中流量控制的有用工具嗎?
    在Python中使用Try-Except-Else有好處嗎? 在Python中,遇到的常見程式碼區塊是:try: try_this(whatever) except SomeException as exception: #Handle exception else: return...
    程式設計 發佈於2024-11-16
  • 什麼時候應該使用 jmap 的 -F 選項進行堆轉儲?
    什麼時候應該使用 jmap 的 -F 選項進行堆轉儲?
    jmap 操作期間無法開啟套接字檔案:-F 選項嘗試使用jmap 取得堆轉儲時遇到問題,導致錯誤訊息:「無法開啟套接字檔案」。這表示 HotSpot JVM 未載入或目標程序無回應。 為了解決這個問題,使用 -F 選項來利用一種不同的機制,稱為 HotSpot Serviceability Agen...
    程式設計 發佈於2024-11-16
  • 如何讓 CSS 動畫在 Webkit 完成後保持原狀?
    如何讓 CSS 動畫在 Webkit 完成後保持原狀?
    理解Webkit CSS動畫持久性使用CSS3動畫時,經常會遇到動畫元素恢復到原始狀態的情況動畫完成。雖然此行為符合動畫停止的標準邏輯,但在某些用例中似乎違反直覺。 考慮提供的範例,其中使用 Webkit CSS 語法將「drop_box」元素設定為下降 100 像素的動畫。動畫完成後,框中的文字跳...
    程式設計 發佈於2024-11-16
  • 如何使用 Selenium 點選具有複雜 HTML 結構的按鈕?
    如何使用 Selenium 點選具有複雜 HTML 結構的按鈕?
    Selenium 點擊具有複雜HTML 結構的按鈕當您嘗試使用Selenium 點擊具有複雜HTML 結構的按鈕時,您可能會遇到NoSuchElementException。當按鈕的 HTML 包含多個具有 onclick 屬性的類別或元素時,可能會發生這種情況。 若要精確按一下此類按鈕,請依照下列...
    程式設計 發佈於2024-11-16
  • 如何刪除 PHP 中特定子字串之後的所有內容?
    如何刪除 PHP 中特定子字串之後的所有內容?
    如何刪除PHP 中特定子字串之後的部分字串您可以使用下列指令刪除PHP 中特定子字串之後的所有內容substr() 函數。 substr()函數接受三個參數:輸入字串起始位置長度 要刪除某個子字串之後的所有內容,可以使用strpos() 函數來找出該子字串在輸入字串中的位置。然後,您可以使用 sub...
    程式設計 發佈於2024-11-16
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-16
  • 我們如何計算 JavaScript 物件的大致記憶體佔用量?
    我們如何計算 JavaScript 物件的大致記憶體佔用量?
    確定 JavaScript 物件的記憶體佔用在 JavaScript 中,了解物件的記憶體消耗對於優化效能和避免記憶體洩漏至關重要。本文解決了獲取 JavaScript 物件大小的查詢,深入研究了估計此類物件所佔用的大致記憶體的解決方案。 確定物件大小In JavaScript 中沒有專門設計的內建...
    程式設計 發佈於2024-11-16
  • 如何使用 CSS 設定圖片地圖區域的樣式?
    如何使用 CSS 設定圖片地圖區域的樣式?
    您可以使用 CSS 在圖片映射上設定滑鼠懸停樣式嗎? 圖像映射用於描繪圖像中的可單擊區域。預設顯示為簡單幾何形狀的這些區域的樣式可以用作視覺互動介面。人們可能會想知道這對 CSS 是否可行,CSS 是網站美觀不可或缺的工具。雖然 CSS 無法直接設定圖像映射區域的樣式,但有一些巧妙的解決方法可以實現...
    程式設計 發佈於2024-11-16
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-16

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3