如何在TableView中设置编码

时间:2016-06-08 16:04:11

标签: java javafx utf-8 character-encoding tableview

我的TableView没有显示德语 Umlaut ,如äöü尽管 我的控制台向我展示了杜塞尔多夫,科隆,慕尼黑等人的正确角色。

我是否必须在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]);
    }
}  

1 个答案:

答案 0 :(得分:3)

问题在于您如何阅读此课程中的数据IOFileOperations

如果不包含这些内容,我们无法帮助您找出实施中的确切问题。
下面我提供了一个重新创建问题的示例,包括如何使用以下文本文件进行更正:

  

杜塞尔多夫
科隆·慕尼黑

哪个应该可以帮助您调试和纠正自己的实现

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