Игра в игры в угадайку, как и все остальные (описание ... отсутствует; -)
Таким образом, предположим, что TableModel из двух столбцов, содержащий имя пользователя и пароль, соответственно, отображается в JTable с включенным перетаскиванием в trueи по умолчанию TransferHandler.Предполагая, что рендеринг пароля в JTable каким-то образом «замаскирован», но в c & p выглядит как открытый текст.
@ Робин уже обнаружил основную причину: по умолчанию TransferHandler просто использует getValueAt (...). ToString () для создания передаваемого.Это приводит к раскрытию строки пароля, то есть к тому, что хранится в модели.
Простой выход (в отличие от лучшего Transferhandler, о котором снова упоминал @Robin: используется render значение вместо toString. Примечание для себя: файловая задача для SwingX ) для * должна не хранить простой пароль, но объект-обертку:
public class Password {
private final String password;
public Password(String password) {
this.password = password;
}
// api as needed to make it worthwile ...
public boolean isValid(String password) {
...
}
// for the sake of c&p, override the toString
// for the lazy, this is the string rep used by the default renderer
@Override
public String toString() {
return "******************";
}
}
Приложение (это специфично для SwingX, расширяя мой комментарий к примеру @ Robin)
На самом деле мне нравится такой подход, как быстрое решение для копирования.Просто «исправьте» модель обертки, чтобы в полной мере использовать текущий API, то есть использовать table.getStringAt (...) для представления String.При этом нет необходимости передавать StringValue в нескольких местах, внутренние устройства будут обрабатывать его соответствующим образом.
private static class StringTableModel extends AbstractTableModel {
private JXTable delegateTable;
private StringTableModel(JXTable aTable) {
delegateTable = aTable;
}
@Override
public int getRowCount() {
return delegateTable.getRowCount();
}
@Override
public int getColumnCount() {
return delegateTable.getColumnCount();
}
@Override
public Object getValueAt(int aRowIndex, int aColumnIndex) {
return delegateTable.getStringAt(aRowIndex, aColumnIndex);
}
}
На уровне платформы SwingX должен поддерживать WYSIWYE (что вы видите, что вы экспортируете) сразу после установки, так же как и другие WYSIWYX: X = M для совпадения,X = S для сортировки, X = F для фильтра.Поднята проблема 1477 в системе отслеживания проблем SwingX