1

の私の実装ではJTable。一部の列を編集可能にし、一部の列を編集不可にしておく必要があるため、上書きしましたisCellEditable-

@Override
public boolean isCellEditable(int row, int col) {
    if (col == uneditableColumn) {
        return false;
    }
    return bEdit;
}

今私の要件は、ダブルクリックでのみセルを編集できるようにすることです。つまり、ユーザーがセルをダブルクリックすると、編集可能モードになります。このためには、独自のものを作成してCellEditorオーバーライドする必要があります。

public boolean isCellEditable( EventObject e )

誰かが使用できるかどうかを提案できますか-

public boolean isCellEditable(int row, int col) 

助けてください -

4

2 に答える 2

3

オーバーライドisCellEditable(...)するのでJTableはなく、カスタム テーブル モデルを提供します。

JavaDoc からJTable#isCellEditable(...):

列は、TableModel の列順序ではなく、テーブル ビューの表示順序で指定されます。ユーザーがテーブル内の列を再配置すると、ビュー内の特定のインデックスの列が変更されるため、これは重要な違いです。一方、ユーザーのアクションがモデルの列の順序に影響を与えることはありません。

さらに、セルがテーブルに対して編集可能であるように見えても、エディター自体は、ダブルクリックするまで入力フィールドを提供しない場合があります。一度に 1 つのセルだけを編集可能にしたい場合は、その情報もモデルに保存して、エディターにチェックさせることができます。

于 2012-04-02T07:57:29.520 に答える
3
is to allow edit the cell only on Double click i.e. if user double clicks 
on cell then only it comes into editable mode.

あなたはDefaultCellEditor#clickCountToStartを見ました

CellEditor またはメソッドオーバーライド用 isCellEditable (AbstractTableModel)

@Override
public boolean isCellEditable(EventObject anEvent) {
    if (anEvent instanceof MouseEvent) {
        return ((MouseEvent) anEvent).getClickCount() >= clickCountToStart;
    }
    return true;
}

DefaultTableModel の場合は

import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.*;

public class EditorRendererClickCountToStart {

    public EditorRendererClickCountToStart() {
        TableModel model = new DefaultTableModel(new Object[][]{
                    {"A", "Item 0"}, {"B", "Item 1"}, {"C", "Item 2"},
                    {"D", "Item 3"}, {"E", "Item 4"}}, new String[]{"TextField", "Combo"});
        JTable table = new JTable(model);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        DefaultCellEditor editor = new DefaultCellEditor(new JComboBox(new Object[]{
                    "Item 0", "Item 1", "Item 2", "Item 3", "Item 4"}));
        editor.setClickCountToStart(2);
        table.getColumnModel().getColumn(1).setCellEditor(editor);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JScrollPane(table));
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                System.out.println(info.getName());
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (UnsupportedLookAndFeelException e) {// handle exception
        } catch (ClassNotFoundException e) {// handle exception
        } catch (InstantiationException e) {// handle exception
        } catch (IllegalAccessException e) {// handle exception
        }
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new EditorRendererClickCountToStart();
            }
        });
    }
}
于 2012-04-02T08:02:17.743 に答える