-3

JTableこのコードでコンテンツを保存しています:

@override
public void editingStopped(ChangeEvent ce) {

    PreparedStatement pstmt = null;
    try {
        int row = getEditingRow();
        int column = getEditingColumn();
        DefaultStyledDocument doc = (DefaultStyledDocument) getCellEditor().getCellEditorValue();

        doc.setDocumentFilter(null);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject((DefaultStyledDocument) doc);
        oos.flush();

        byte[] data = bos.toByteArray();

        oos.close();
        bos.close();

        String query = "update BOX_ROWS "
                    + "set COLUMN1= ? "
                    + "where BOX_ID=" + ID
                    + " and INDEX=" + row;
        pstmt = ReseachAssistantUI.conn.prepareStatement(query);
        pstmt.setObject(1, data);

        pstmt.executeUpdate();
        doc.setDocumentFilter(new MyDocumentFilter());

    } catch (SQLException ex) {
        Logger.getLogger(MyTable.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
        JOptionPane.showMessageDialog(null, "MyTable - " + ex.getMessage());
    } catch (IOException ex) {
        Logger.getLogger(MyTable.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
        JOptionPane.showMessageDialog(null, "MyTable - " + ex.getMessage());
    } finally {
        DBUtil.closePreparedStatement(pstmt, MyTable.class.getName());
    }

    super.editingStopped(ce);
}

Windowsで問題なく動作します。ただし、 Mac OS Xでアプリを実行すると、次のメッセージが表示されます。

MyTable - com.apple.laf.AquaComboBoxUI

テーブル ポップアップ エディターにはツールバーに 2 つのコンボボックスがありますが、この例外で何をする必要があるのか​​わかりません。なぜこの例外がスローされるのか誰かが知っていますか? オブジェクトをシリアル化する方法に何か問題がありますか?

4

1 に答える 1

4

編集が終了した、モデルが更新される前に、変更されたセルの内容を保持しようとしているようです。この回答は、通常の一連のイベントの概要を示しています。お気づきのように、実際のエディター コンポーネントはプラットフォームによって異なる場合があります。オーバーライドする代わりに、更新されたセルの行、列、およびタイプを知っJTable#editingStopped()いるオーバーライドします。例はここここにあります。この関連するは、を として使用する方法を示しています。TableModel#setValueAt()JComboBoxCellEditor

于 2012-11-24T13:09:59.387 に答える