2016-06-08 2 views
0

мой TableView не показывает немецкий Умляут как ä ö ü хотя моя консоль показывает мне правильные символы для Дюссельдорф, Кельн, Мюнхен и т.д.Как установить кодировку в TableView

Должен ли я устанавливать кодировку или подобное в tableView?

screenshot

Вот пример

TableColumn<TextData, String> column; 
TableView<TextData> table; 
ObservableList<TextData> data = FXCollections.observableArrayList(); 

... 
... 
//part of main code 
Task<ObservableList<TextData>> task = new Task() { 

@Override 
protected Object call() throws Exception { 

    IOFileOperations io = new IOFileOperations(fileName); 
    data = io.getData(); 
    colNumSize=io.getNumberOfColumns(); 

    Platform.runLater(new Runnable() { 

     @Override 
      public void run() { 

       for(int i=0;i<colNumSize;i++) { 
        final int x=i; 
        column = new TableColumn<>("["+x+"]"); 
        //populate the columns with data 
        column.setCellValueFactory(cellData -> cellData.getValue().dataProperty(x));        
        table.getColumns().add(column); 
       } 
      table.setItems(data); 
      }   
     }); 
     return null; 
    } 
}; 
new Thread(task).start(); 

//method getData in class IOFileOperations 
public ObservableList<TextData> getData() { 
    int numRow=results.length; //<-results a string of Array (String [][] results) 
    int numCol=results[0].length; 
    for(int i=0;i<numRow;i++) list.add(new TextData(i,numCol, results)); 
    return list; 
} 

//class TextData 
public class TextData { 

    public StringProperty [] dataValue; 

    public TextData(int row, int numCol, String loadedText [][]) { 
     this.dataValue = new StringProperty[numCol]; 
     for(int i=0;i<numCol;i++) dataValue[i] = new SimpleStringProperty(loadedText[row][i]); 
    } 
} 
+2

Эти имена работают для меня, определяя их в коллекции. Как вы заполняете свой TableView? – Peter

+0

Работает отлично для меня тоже. Пожалуйста, отредактируйте свой вопрос, чтобы включить [MCVE]. –

+0

@James_D в порядке, я добавил пример – Ramses

ответ

2

Похоже, проблема заключается с тем, как вы читаете в ваших данных в этом классе IOFileOperations

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

Дюссельдорф
Köln
München

, которые должны помочь вам отладить и исправить собственную реализацию


public class City { 
    private int id; 
    private String name; 

    public City(int id, String name){ 
     this.id = id; 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 

    public String getName() { 
     return name; 
    } 
} 

Чтение в данные:
Обратите внимание, что на этом этапе мы можем предоставить кодировку, которую мы хотим использовать. С UTF-8 все будет отображаться, как и ожидалось, однако, если вы переключаетесь между комментировал линии в умляуты не будет признан

ObservableList<City> data = FXCollections.observableArrayList(); 
File file = new File("test.txt"); 
//Charset charset = StandardCharsets.US_ASCII; 
Charset charset = StandardCharsets.UTF_8; 
int currentId = 0; 

try(BufferedReader reader = new BufferedReader(
     new InputStreamReader(new FileInputStream(file), charset))) { 
    String line = reader.readLine(); 

    while (line != null) { 
     data.add(new City(currentId, line)); 
     line = reader.readLine(); 
     currentId++; 
    } 
} 

и настройка TableView:

TableView<City> tableView = new TableView(); 
TableColumn idColumn = new TableColumn("Id"); 
idColumn.setCellValueFactory(
     new PropertyValueFactory<>("id")); 
TableColumn cityColumn = new TableColumn("City"); 
cityColumn.setCellValueFactory(
     new PropertyValueFactory<>("name")); 

tableView.getColumns().setAll(idColumn, cityColumn); 
tableView.getItems().addAll(data); 


Разница между кодировок:

enter image description here enter image description here

+0

Я получаю правильные умляуты с * charset = StandardCharsets.UTF_8; * – Ramses

Смежные вопросы