java - TableView 和映射。字符和整数

标签 java uitableview dictionary javafx javafx-2

我想知道是否可以像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/

相关文章:

java - Jar to Mac OSX App Bundle with app bundler

java - 如何在 Java 中创建带圆角的图像?

java - java中来自数据库的Json对象

ios - UITableView 重新加载数据不起作用

iphone - UITableViewCell 在取消选择时选择了阴影颜色

python - 文件,剥离每一行并添加到字典中的键

java - 如何使用 java-ascii-table 创建表来显示 testObject 的字段值

ios - 为什么元素会无缘无故停止显示?

python - 为什么 issubclass(dict, collections.Mapping) 在 CPython 中为真?

python - 如何使用sqlsoup插入字典