2012-06-22 3 views
1

JTable의 전체 행 선택을 제한하는 쉬운 방법이 있습니까? 나는 사용자가 shift와 ctrl을 사용하여 최대 X 행을 선택할 수있게하고 싶다. 그가 한 행을 다시 클릭하면 모든 선택이 취소됩니다. 현재 동작 방식을 정렬하지만 선택한 행의 총 크기는 제한합니다.JTable의 행 선택 제한

여기 현재 구현 중이며 그래픽으로 선택 영역을 제한하는 방법에 대한 설명이 없습니다. 귀하의 경우

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

를 들어

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

그냥 확인

또는이 선택 제한 오에를 행하는 데 도움이 될 수 있습니다이

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 조치 만이 아닙니다. 따라서 범위

+0

예, 일정에 따라 선택 행을 셀 수 있습니다. –

1

같은 last - first < X ne 선택

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