2013-05-13 2 views
0

Здесь я создаю один TableView и отображаю данные в этом TableView, передавая ObservableList. Здесь наблюдаемый список берется из базы данных. И показан в виде таблицы в столбцах Name-Value. Здесь некоторые пароли также присутствуют в data.So, как скрыть эти поля пароля от пользователя?Как создать поле пароля или скрыть пароль внутри представления таблицы

+0

Почему не только вы хэширования пароль, так что вам не придется использовать маскировку пароля всякий раз, когда вы хотите отображать пароль. – AsirC

ответ

1

Вы можете создать фабрику ячеек с помощью PasswordField.

Во-первых, вы должны установить заводскую ячейку.

tableColumnPass.setCellFactory(new Callback<TableColumn<YourTableBean,String>, TableCell<YourTableBean,String>>() {   
     @Override 
     public TableCell<YourTableBean, String> call(TableColumn<YourTableBean, String> cell) { 
      return new PasswordFieldCell(); 
     } 
    }); 

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

public class PasswordFieldCell extends TableCell<YourTableBean, String> { 
private PasswordField passwordField;  
public PasswordFieldCell() { 
    passwordField = new PasswordField(); 
    passwordField.setEditable(false); 
    this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
    this.setGraphic(null); 
} 

@Override 
protected void updateItem(String item, boolean empty) { 
    super.updateItem(item, empty); 
    if(!isEmpty()){ 
     passwordField.setText(item); 
     setGraphic(passwordField); 
    }else{ 
     setGraphic(null); 
    } 
}} 

Если у вас нет Бин, вы все равно можете это сделать. Просто нужно изменить cellfactory конкретного столбца.

Надеюсь, это поможет.

0

Я думаю, что этикетка может сделать это лучше .. (Базирующаяся в @Antonio J. ответ)

public class PasswordLabelCell extends TableCell<YourTableBean, String> { 
    private Label label; 

    public PasswordLabelCell() { 
     label = new Label(); 
     this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
     this.setGraphic(null); 
    } 

    private String genDotString(int len) { 
     String dots = ""; 

     for (int i = 0; i < len; i++) { 
      dots += "\u2022"; 
     } 

     return dots; 
    } 

    @Override 
    protected void updateItem(String item, boolean empty) { 
     super.updateItem(item, empty); 
     if (!empty) { 
      label.setText(genDotString(item.length())); 
      setGraphic(label); 
     } else { 
      setGraphic(null); 
     } 
    } 
} 

А теперь установить ячейки колонки завод

myPasswordColumn.setCellFactory(param -> new PasswordLabelCell()); 
Смежные вопросы