1
 this.tModel.insertRow(rowCount,new Object[]  {"","","",""});    
 this.table.setRowSelectionAllowed(true);
 this.table.changeSelection(0, 0, false, false);

 this.table.addKeyListener(new KeyListener() {
      @Override
      public void keyPressed(KeyEvent e) {
          if (e.getKeyCode()==KeyEvent.VK_ENTER) {
               rowCount = this.table.getSelectedRow() + 1;
               tModel.insertRow(rowCount,new Object[]{"", "","",""}); 
          }
      }
 });

マウスクリックで実行時に行を追加するjtableを作成しようとしています。私はすでにデフォルトの行を追加しました。しかし、私はその行の選択を得ることができません。キーを押したアクションで追加されたときに、選択範囲を新しく追加された行に変更したいですか?答えを提案してください?前もって感謝します

4

2 に答える 2

3

まず、キー バインディング APIを使用することをお勧めしますKeyListener。これは低レベルの API であり、イベントを目にする前に消費することができます。

で行選択を変更/設定するには、 JTable#setRowSelectionIntervalJTableを使用する必要があります

InputMap im = getInputMap(WHEN_FOCUSED);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "enter");
ActionMap am = getActionMap();
am.put("enter", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        int rowCount = table.getSelectedRow() + 1;
        tModel.insertRow(rowCount,new Object[]{"", "","",""});                 
        table.setRowSelectionInterval(rowCount, rowCount);
    }
});
于 2012-10-30T10:55:08.217 に答える
2

テーブルの最後のエントリを選択するには、次のような方法を使用できます。

private void selectLastPossibleEntry() {
    final int rowCount = tableModel.getRowCount();
    final int selectedRowCount = jTable.getSelectedRowCount();
    if (rowCount > 0 && selectedRowCount <= 1) // we do not want do destroy multiple selected lines by the user
        jTable.setRowSelectionInterval(rowCount - 1, rowCount - 1);
}

またはより一般的な:

private void selectLastPossibleEntryForJTable(final JTable jTable) {
    final int rowCount = jTable.getModel().getRowCount();
    final int selectedRowCount = jTable.getSelectedRowCount();
    if (rowCount > 0 && selectedRowCount <= 1) // we do not want do destroy multiple selected lines by the user
        jTable.setRowSelectionInterval(rowCount - 1, rowCount - 1);
}

ヒント: これは、さまざまな並べ替えには対応していません。

于 2012-10-30T11:11:22.023 に答える