Я использую интерактивный 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 "";
}
}
Но как я могу изменить код, чтобы открыть средство выбора файлов, если щелкнуть правой кнопкой мыши, и действовать как обычное текстовое поле в противном случае?