Как открыть файл выбора в интерактивной Jtable правой кнопкой мыши - PullRequest
0 голосов
/ 25 сентября 2018

Я использую интерактивную 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 "";

        }
}

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

1 Ответ

0 голосов
/ 25 сентября 2018

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

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

Вместо этого вы просто используете редактор по умолчанию, но вам нужно добавить 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() );
}
...