2012-06-22 64 views
1

是否有簡單的方法來限制JTable中行的總體選擇?我的意思是我想讓用戶使用shift和ctrl來選擇最多X行。如果他再次點擊一行,則會取消所有選擇。對當前行爲進行排序,但限制所選行的總量。JTable中的限制行選擇

這是我目前的實現,對於如何以圖形方式限制選擇,我有點無知。

public class RoomsListView extends AbstractViewPanel { 

public RoomsListView(DefaultController controller) 
{ 
    this.controller = controller; 
    initUI(); 
} 

private void initUI() 
{ 
    tableT = new JTable(RoomsModel.getInstance()); 
    sorter = new TableRowSorter<RoomsModel>(RoomsModel.getInstance()); 
    tableT.setRowSorter(sorter); 

    tableT.setPreferredScrollableViewportSize(new Dimension(CUSTOM_TABLE_WIDTH, CUSTOM_TABLE_HEIGHT)); 

    tableT.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      rowClickedPerformed(e); 
     } 
    }); 
} 

private void rowClickedPerformed(MouseEvent e) 
{ 

} 

public void modelPropertyChange(PropertyChangeEvent evt) 
{ 
} 

public JTable getTable() 
{ 
    return tableT; 
} 

private final int CUSTOM_TABLE_WIDTH = -1; 
private final int CUSTOM_TABLE_HEIGHT = 150; 

private JTable tableT; 
private DefaultController controller; 
private TableRowSorter<RoomsModel> sorter; 

}

回答

3

對於你的情況

.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent e) { 
    int row = m_table.getSelectedRow(); 
    int col = m_table.getSelectedColumn(); 
    } 
}); 

只是檢查last - first < X

或類似這樣的

SelectionListener listener = new SelectionListener(table); 
table.getSelectionModel().addListSelectionListener(listener); 
table.getColumnModel().getSelectionModel() 
    .addListSelectionListener(listener); 

public class SelectionListener implements ListSelectionListener { 
    JTable table; 

    // It is necessary to keep the table since it is not possible 
    // to determine the table from the event's source 
    SelectionListener(JTable table) { 
     this.table = table; 
    } 
    public void valueChanged(ListSelectionEvent e) { 
     // If cell selection is enabled, both row and column change events are fired 
     if (e.getSource() == table.getSelectionModel() 
       && table.getRowSelectionAllowed()) { 
      // Column selection changed 
      int first = e.getFirstIndex(); 
      int last = e.getLastIndex(); 
     } else if (e.getSource() == table.getColumnModel().getSelectionModel() 
       && table.getColumnSelectionAllowed()){ 
      // Row selection changed 
      int first = e.getFirstIndex(); 
      int last = e.getLastIndex(); 
     } 

     if (e.getValueIsAdjusting()) { 
      // The mouse button has not yet been released 
     } 
    } 
} 
+0

不得不調整,因爲我允許選擇,如第一,第三和第五,它不僅僅是一個移動動作,而是一個用於選擇元素的ctrl動作。所以range

+0

是的,您可以計算事件中的選擇行 –

1

這可能有助於給行選擇限制鄰ne選擇

table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);