0

ValidAcTableModel と呼ばれる DefualtTableModel を持つ JTable を持つ GUI を持つ、私が作成したいくつかのソフトウェアを使用する場合、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 の [New] ボタンをクリックして使用すると、

  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 -1any row isn't selectedAPI からの場合にのみ返し ます

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 に答える