【问题标题】:How to display HashMap data in GUI?如何在 GUI 中显示 HashMap 数据?
【发布时间】:2013-04-21 15:49:47
【问题描述】:

我有一个HashMap<String, String> 代表日期(键)和金额(值)。

我想在我的界面上显示此信息。我首先使用 ArrayList 并为添加到 HashMap 的每个新键和值添加一个新的 JLabel。然而这导致了显示问题,我也觉得这不是正确的做法:

Iterator iterator = labels.entrySet().iterator();
    while (iterator.hasNext()) {
        Map.Entry pairs = (Map.Entry)iterator.next();
        entries.add(new JLabel(pairs.getKey() + ": £" + pairs.getValue()));
        for(JLabel entry : entries) {
            mainPanel.add(entry);
            for(int i = 0; i < entries.size() - 1; i+=2) {
                JLabel labelOne = entries.get(i);
                JLabel labelTwo = entries.get(i+1);
                mainPanelLayout.putConstraint(SpringLayout.NORTH, labelOne,
                    400,
                    SpringLayout.NORTH, contentPane);
                mainPanelLayout.putConstraint(SpringLayout.NORTH, labelTwo,
                    10,
                    SpringLayout.SOUTH, labelOne);

            }
            /*mainPanelLayout.putConstraint(SpringLayout.NORTH, entry,
                400,
                SpringLayout.NORTH, contentPane);*/
        }
    }

就我想要实现的目标而言,我想像这样显示信息:

21/04/13 : 300

22/04/13 : 400

有没有办法在 GUI 中显示来自HashMap 的信息?

【问题讨论】:

标签: java swing jtable layout-manager springlayout


【解决方案1】:

我将使用 JTable 并在一列中显示键的字符串表示形式,并在其他列中显示相应值的重要字段的字符串表示形式。我认为最重要的一步是创建一个像样的 TableModel 来保存数据。它可以使用 Map 作为其数据核心,但 Map 需要以某种方式可排序,我认为这样才能正常工作,可能是 LinkedHashMap 或 TreeMap。

【讨论】:

  • 您至少需要进行一些数据复制才能随机访问Map
  • 啊哈,我确实玩过 JTable,但我的主要问题是行和列是可编辑的(尽管我想我知道如何解决这个问题)。所以谢谢,现在我知道这是前进的方向!
  • @TomHawtin-tackline:我不确定。如果 Map 是有序的,并且如果对 Map 数据的任何更改触发了 AbstractTableModel 触发数据更改方法之一,那么您可以在需要获得随机访问权时遍历地图。
  • @HovercraftFullOfEels 你有一些 O(n^2) 算法的危险。当然,通过链表迭代在事物方案中相对便宜,并且您需要一个相当大的 n to 才能达到巨大的性能冲击。
  • 是的!使用 JTable 成功!感谢所有帮助:)
猜你喜欢
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
相关资源
最近更新 更多