2

JTableの行の合計選択を制限する簡単な方法はありますか?つまり、ユーザーがShiftキーとCtrlキーを使用して、最大X行を選択できるようにしたいということです。彼が行をもう一度クリックすると、すべての選択がキャンセルされます。現在の動作の一種ですが、選択した行の総数を制限します。

これが私の現在の実装です。選択をグラフィカルに制限する方法がわかりません。

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;

}

4

2 に答える 2

4

あなたの場合

.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
        }
    }
}
于 2012-06-22T21:11:28.627 に答える
1

これは、行選択の制限を1つの選択に制限するのに役立つ場合があります

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

于 2014-10-30T05:05:09.457 に答える