0

以下で提供されるコードをcamickr参照として使用して、コンボボックスをセルエディターとして追加しました。

JTable (Java) の列に一意の JComboBox を追加する方法

私の場合を除いて、列内のすべてのセルで使用されるコンボボックスは 1 つだけ必要です。私が直面している問題は、コンボボックスが最後に選択されたアイテム (または現在選択されているアイテムかどうかはわかりません) を自動的に選択することです。異なる行が同じコンボボックスを共有しているため、セルの 1 つをクリックすると自動的に変更されます。最後に選択した項目まで。

簡単なデモンストレーションとして、上記のコードを変更して問題を示しました。コンボボックスで、選択したセルに設定されている項目と同じリスト上の項目を自動的に選択したい (セルを選択してから、そのセルの内容を自動的に変更するのではなく)

import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;

public class Test extends JFrame
{
    List<TableCellEditor> editors = new ArrayList<TableCellEditor>(3);

    public Test()
    {
        // Create the editors to be used for each row

        String[] items1 = { "Red", "Blue", "Green" };
        JComboBox comboBox1 = new JComboBox( items1 );
        DefaultCellEditor dce1 = new DefaultCellEditor( comboBox1 );
        editors.add( dce1 );

        //  Create the table with default data

        Object[][] data =
        {
            {"Color", "Red"},
            {"Shape", "Square"},
            {"Fruit", "Banana"},
            {"Plain", "Text"}
        };
        String[] columnNames = {"Type","Value"};
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        JTable table = new JTable(model)
        {
            //  Determine editor to be used by row
            public TableCellEditor getCellEditor(int row, int column)
            {
                int modelColumn = convertColumnIndexToModel( column );

                if (modelColumn == 1 && row < 3)
                    return editors.get(0);
                else
                    return super.getCellEditor(row, column);
            }
        };

        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );
    }

    public static void main(String[] args)
    {
        Test frame = new Test();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible(true);
    }
} 
4

1 に答える 1

2

デフォルトでは、コンボボックスの最初の項目が選択されています。例では「赤」です。

セルを編集すると、TableModel の値がコンボボックス エディターで選択されます。テーブル内のデータがコンボ ボックス内のどのエントリとも一致しないため、選択は変更されず、エディターの値として「赤」が表示されます。

エディターから選択すると、その値がモデルに保存され、次にセルを編集するときに適切に表示されます。

問題の解決策は、TableModel の作成時に有効なデータが含まれていることを確認することです。この方法でのみ、コンボ ボックス内の適切な項目を選択できます。

どの項目を選択するかを決定するには、アクション リスナーをコンボボックスにアタッチする必要があると考えました。

いいえ、エディターとして使用されている場合、comboBox でリスナーを操作することはありません。コンボ ボックス エディターは、項目の選択を自動的に行います。

于 2013-06-27T16:25:14.580 に答える