Как открыть средство выбора файлов в интерактивной Jtable, щелкнув правой кнопкой мыши

Я использую интерактивный JTable на основе кода здесь.

Что мне нужно, так это то, что после двойного щелчка для редактирования ячейки
Если щелкнуть правой кнопкой мыши, откроется средство выбора файла для выбора файла,
иначе просто введите путь вручную после двойного щелчка по всем ячейкам в первом столбце.

я добавил

TableColumn waweletFileColumn = table.getColumnModel().getColumn(InteractiveTableModel.TITLE_INDEX );
    waweletFileColumn.setCellEditor(new FileChooserCellEditor());

в интерактивной таблице, чтобы изменить поведение ячеек.

    public class FileChooserCellEditor extends DefaultCellEditor implements TableCellEditor {

    /** Editor component */
    private JTextField tf;
    /** Selected file */
    private String file = "";

    private String type;

    /**
     * Constructor.
     */
    public FileChooserCellEditor(String type) {
        super(new JTextField());
        this.type = type;
        // Using a JButton as the editor component
        tf = new JTextField();
        tf.setBorder(null);
    }

@Override
public Object getCellEditorValue() {
    return file;
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

    file = myFileChooser(type);
    fireEditingStopped();

    tf.setText(file);
    return tf;
}

public static String myFileChooser() {

        JFileChooser chooser = new JFileChooser();

        chooser.setCurrentDirectory( new File(System.getProperty("user.home"));
        chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
        chooser.setDialogTitle("Choose" );

        chooser.setAcceptAllFileFilterUsed(true);

        chooser.setDialogType(JFileChooser.OPEN_DIALOG);

        if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
          direct = chooser.getSelectedFile();
          return chooser.getSelectedFile().toString();
        }

        return "";

        }
}

Но как я могу изменить код, чтобы открыть средство выбора файлов, если щелкнуть правой кнопкой мыши, и действовать как обычное текстовое поле в противном случае?


person Community    schedule 25.09.2018    source источник


Ответы (1)


Но как я могу изменить код, чтобы открыть средство выбора файлов, если щелкнуть правой кнопкой мыши, и действовать как обычное текстовое поле в противном случае?

Избавьтесь от пользовательского редактора ячеек.

Вместо этого вы просто используете редактор по умолчанию, но вам нужно добавить MouseListener в текстовое поле редактора, чтобы обрабатывать щелчок правой кнопкой мыши и отображать JFileChooser.

Таким образом, основная логика может быть примерно такой:

JTextField editField = new JTextField()
editfield.addMouseListener(...);
DefaultCellEditor editor = new DefaultCellEditor( editField );
table.getColumnModel().getColumn(???).setCellEditor(editor);

Затем добавьте свою логику в MouseListener, чтобы отобразить JFileChooser. Когда средство выбора файлов закрыто, вы получаете выбранный файл и обновляете текстовое поле. Что-то типа:

JTextField textField = (JTextField)e.getSource();
JFileChooser fc = new JFileChooser(...);
int returnVal = fc.showOpenDialog(textField);

if (returnVal == JFileChooser.APPROVE_OPTION) 
{
        File file = fc.getSelectedFile(); 
        textField.setText( file.toString() );
}
person camickr    schedule 25.09.2018
comment
Спасибо, сработало, похоже, я слишком усложнил решение :) - person ; 26.09.2018