任務是使用戶能夠選擇多個不連續的單元格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中文網其他相關文章!