我想知道是否可以像Map一样使用TableColoum?
我想获取一个文件>读取文件>扫描所有字符>将字符映射到第一列>将字符数映射到第二列。
可以用TableColoum来做吗?
致以诚挚的问候
亚历克斯
编辑!:代码在这里:
package sample;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
import javafx.util.Callback;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main extends Application {
Map<Character, Integer> countCharacters = new TreeMap<Character, Integer>();
Scanner scanner = null;
@Override
public void start(Stage primaryStage) throws Exception {
// sample data
int total = 0;
try {
scanner = new Scanner(new File("MY_FILE_PATH_HERE"), "utf-8");
while (scanner.hasNext()) {
char[] chars = scanner.nextLine().toLowerCase().toCharArray();
for (char character : chars) {
if (Character.isLetter(character)) {
if (countCharacters.containsKey(character)) {
countCharacters.put(character, countCharacters.get(character) + 1);
} else {
countCharacters.put(character, 1);
}
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (scanner != null) {
scanner.close();
}
}
if (!countCharacters.isEmpty()) {
for (Map.Entry<Character, Integer> entry : countCharacters.entrySet()) {
total += entry.getValue();
}
for (Map.Entry<Character, Integer> entry : countCharacters.entrySet()) {
System.out.println(entry.getKey() + ":\t" + entry.getValue() + " \t: \t " + percentCount(entry.getValue(), total) + "%");
}
if (!countCharacters.isEmpty()) {
for (Map.Entry<Character, Integer> entry : countCharacters.entrySet()) {
total += entry.getValue();
}
for (Map.Entry<Character, Integer> entry : countCharacters.entrySet()) {
System.out.println(entry.getKey() + ":\t" + entry.getValue() + " \t: \t " + percentCount(entry.getValue(), total) + "%");
}
TableColumn<Map.Entry<Character, Integer>, Character> column1 = new TableColumn<>("Key");
for (Map.Entry<Character, Integer> entry : countCharacters.entrySet())
{
column1.setCellValueFactory(new PropertyValueFactory<Map.Entry<Character, Integer>, Character>("Test"));
}
TableColumn<Map.Entry<Character, Integer>, Character> column2 = new TableColumn<>("Value");
for (Map.Entry<Character, Integer> entry : countCharacters.entrySet())
{
column2.setCellValueFactory(new PropertyValueFactory<Map.Entry<Character, Integer>, Character>(""));
}
ObservableList<Map.Entry<Character, Integer>> items = FXCollections.observableArrayList(map.entrySet());
final TableView<Map.Entry<Character, Integer>> table = new TableView<>(items);
table.getColumns().setAll(column1, column2);
primaryStage.setTitle("Alice");
primaryStage.setScene(new Scene(table, 300, 275));
primaryStage.show();
}
}
public static float percentCount(float number, int total)
{
return (number / total) * 100;
}
public static void main(String[] args) {
launch(args);
}
}
最佳答案
以下解决方案一定适合您。解决方案是将 map 的字符/整数转换为字符串以将其显示在 TableView 上。
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
import javafx.util.Callback;
import java.util.Map;
import java.util.TreeMap;
public class Main extends Application {
Map<Character, Integer> countCharacters = new TreeMap<Character, Integer>();
@Override
public void start(Stage primaryStage) throws Exception {
// sample data
int total = 0;
countCharacters.put('A', 2);
countCharacters.put('B', 5);
countCharacters.put('C', 10);
if (!countCharacters.isEmpty()) {
for (Map.Entry<Character, Integer> entry : countCharacters.entrySet()) {
total += entry.getValue();
}
for (Map.Entry<Character, Integer> entry : countCharacters.entrySet()) {
System.out.println(entry.getKey() + ":\t" + entry.getValue() + " \t: \t " + percentCount(entry.getValue(), total) + "%");
}
}
TableColumn<Map.Entry<Character, Integer>, String> column1 = new TableColumn<>("Key");
column1.setCellValueFactory(
new Callback<CellDataFeatures<Map.Entry<Character, Integer>, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<Map.Entry<Character, Integer>, String> param) {
return new SimpleStringProperty(String.valueOf(param.getValue().getKey()));
}
});
TableColumn<Map.Entry<Character, Integer>, String> column2 = new TableColumn<>("Value");
column2.setCellValueFactory(
new Callback<CellDataFeatures<Map.Entry<Character, Integer>, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<Map.Entry<Character, Integer>, String> param) {
return new SimpleStringProperty(String.valueOf(param.getValue().getValue()));
}
});
ObservableList<Map.Entry<Character, Integer>> items = FXCollections.observableArrayList(countCharacters.entrySet());
final TableView<Map.Entry<Character, Integer>> table = new TableView<>(items);
table.getColumns().addAll(column1, column2);
primaryStage.setTitle("Alice");
primaryStage.setScene(new Scene(table, 300, 275));
primaryStage.show();
}
public static float percentCount(float number, int total) {
return (number / total) * 100;
}
public static void main(String[] args) {
launch(args);
}
}
关于java - TableView 和映射。字符和整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32559358/