3

私はJavaを使用しており、JTableのセルを編集可能にしようとしています。私のクラスはTableModelを実装し、AbstractTableModelを拡張します(メソッドを使用できるように、メソッドとfireTableCellUpdated(rowIndex, columnIndex))を実装しました。テーブル内の単一のセルをクラスCellのオブジェクトとして表します。isCellEditable()setValueAt()

ここに私の問題があります。セルはすでに編集可能であり、それをクリックすると、カーソルがセルに表示されますが、セルには次のような文字列も表示されますCell@1e63e3d。この文字列を削除し、入力したい値をセルに入力してから、[Enter]をクリックすると正常に機能します。しかし、そこのセルをクリックすると、何も表示されず、空の文字列が表示され、 。は表示されないようにしCell@1e63e3dます。そして、この空の文字列をデフォルトとして設定する方法と場所がわかりません。

My Cellクラスは、セルの色などのセルに関する情報(特性)と、その値をインスタンス変数として格納します。

さらに詳しい情報が必要な場合は教えてください。

4

2 に答える 2

7

TableCellRendererとを設定しTableCellEditorましたJTableか?

セルを表示するために、TableCellRendererはからの場所のコンテンツをレンダリングするために使用されますTableModel。デフォルトでは、その場所にあるのtoStringメソッドを使用するため、セルに表示されていることを説明します。これは、オブジェクトで呼び出されたメソッドの結果です。ObjectCell@1e63e3dtoStringCell

カスタムセルレンダラー(を実装するクラス)を作成することにより、メソッドを使用して、オブジェクトの表示に使用するTableCellRendereraを返すことができます。あなたの場合、オブジェクトの内容を反映するようにラベルの内容を実装および設定するサブクラスを作成することをお勧めします。ComponentCellgetTableCellRendererComponentJLabelTableCellRendererCell

セルの編集に関しては、でセルを編集したいときにからTableCellEditorを受け取ります。は、メソッドを使用してセルの内容()を編集するために使用されるaを返します。ObjectTableModelJTableTableCellEditorComponentObjectgetTableCellEditorComponent

JTextFieldあなたが提供する場合、インターフェースを実装するものを作ることはTableCellEditorあなたのために仕事をすることができると思います。をオーバーライドするときgetTableCellEditorComponentは、オブジェクトのインスタンスCell(つまり)があることを確認し、その場合は、表示または編集するオブジェクトのコンテンツを含むobject instanceof Cellようにを初期化します。JTextFieldCell

推奨読書:IBMdeveloperWorksのSwingのJTableコンポーネントの記事にあるRenderingcellsはJTablesとそのセルのレンダリングおよび編集機能の処理方法を学ぶのに非常に役立つことがわかりました。特に、カスタムレンダラーの作成テーブルセルの編集のセクションが興味深い場合があります。

于 2009-01-26T03:38:48.977 に答える
1

TableCellEditor編集用のコンポーネントを表示するために適切なものを使用していますか?

class MyTableCellEditor
        extends DefaultCellEditor
{
    @Override
    public Component getTableCellEditorComponent(
            JTable table,
            Object value,
            boolean isSelected,
            int row,
            int column)
    {
        final JTextField c = (JTextField) super.getTableCellEditorComponent(
            table,
            ((Cell) value).text, // edit the text field of Cell
            isSelected,
            row,
            column);

        c.selectAll(); // automatically select the whole string in the cell
        return c;
    }
}

カスタムセルレンダラーに加えて、このカスタムセルエディターを使用するようにテーブルに指示する必要があります。

myTable.setDefaultEditor(Cell.class, new MyTableCellEditor());
于 2009-01-26T03:32:27.213 に答える