0

当使用我创建的一些软件时,它有一个带有名为 validAcTableModel 的 DefualtTableModel 的 JTable,当我初始化 validAcTable 时,这是我正在使用的逻辑:

    ListSelectionModel cellSelectModel = validAcTable.getSelectionModel();
    cellSelectModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    cellSelectModel.addListSelectionListener(new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent e) {

            if (d == 0) {
                    suggestedAcTable.clearSelection();
                d = 1;
            } else {

                String selectedAcData = null;
                String selectedSentData = null;
                String selectedDefData = null;
                String selectedBoolean = null;
                validAcTable.revalidate();
                int[] selectedRow = validAcTable.getSelectedRows();
                for (int i = 0; i < selectedRow.length; i++) {
                    selectedAcData = validAcTable.getValueAt(selectedRow[i], 0).toString();
                    selectedDefData = validAcTable.getValueAt(selectedRow[i], 1).toString();
                    selectedBoolean = validAcTable.getValueAt(selectedRow[i], 2).toString();
                    selectedSentData = getSentence((String) validAcTable.getValueAt(selectedRow[i], 0));
                    if (selectedSentData == null) {
                        selectedSentData = "";
                    }
                }
                Acronym acr = new Acronym(selectedAcData, selectedSentData, selectedDefData, false);
                changedAcList.add(acr);
                //String has a white space....need to redo this...
                currentAccTextField.setText(selectedAcData);
                currentSentenceTextArea.setText(selectedSentData);
                currentDefTextArea.setText(selectedDefData);
                if (selectedBoolean != null) {
                    if (selectedBoolean.equals("true")) {
                        acceptAccButton.setEnabled(false);
                        validLabel.setText("Definition is valid in document");
                    } else {
                        acceptAccButton.setEnabled(true);
                        validLabel.setText("Definition is not valid");
                    }
                }

                d = 0;
            }
        }
    });

当我单击 GUI 上的新按钮并使用

  validAcTableModel.getDataVector().removeAllElements();

当我尝试重新加载表格并选择一个项目并使用以下方法获取 selectedRow 时:

  private void acceptAccButtonActionPerformed(java.awt.event.ActionEvent evt) { 
       if (validAcTable.getSelectedRow() >= 0) {
             StringBuilder acDocText = new StringBuilder();
             String acNameDefthmlText = "";
       }
  }

这总是在删除所有元素后在所选行上返回一个负数,然后在我选择一行时重新添加行。我会很感激一些帮助。我正在为 valueChanged 使用 ListSelectionListener。

4

2 回答 2

2
  • 当我尝试重新加载表格并选择一个项目并使用 selectedRow 获取

以编程方式将选择设置为所需的行JTable.setRowSelectionInterval(int index0, int index1);

  • 删除所有元素后,这总是在所选行上返回负数。

Integer -1仅当 any row isn't selected来自 API时才返回

public int getSelectedRow()

Returns the index of the first selected row, -1 if no row is selected.

Returns:
    the index of the first selected row
于 2013-01-08T20:37:51.087 回答
0

要清除数据,请更改方法javax.swing.table.DefaultTableModel.setRowCount(int)

((DefaultTableModel) validAcTable.getModel()).setRowCount(0);

要重新填充模型,请使用:

javax.swing.table.DefaultTableModel.setDataVector(Vector, Vector);
javax.swing.table.DefaultTableModel.setDataVector(Object[][], Object[])

请记住使用模型的相同实例。

使用DefaultTableModel. 这些启动适当的事件以更新 UI。

于 2013-01-08T20:42:40.173 回答