【问题标题】:Printing ArrayList contents into a TextArea将 ArrayList 内容打印到 TextArea
【发布时间】:2015-04-12 20:28:57
【问题描述】:

我有两个名为 keysvalues 的 ArrayList。

keys = {"cat", "dog", "mouse"}
values = {"furry;white", "greyhound;beast", "little;rat"}

我希望将它们打印在 JTextArea(因为我希望它们是可编辑的)或任何其他类似这样的 GUI 组件中:

------------------
cat   |   furry
      |   white
-------------------
dog   |   greyhound
      |   beast
-------------------
mouse |   little
      |   rat

我应该为每个条目动态创建一个新的 TextArea 吗?如果是这样,我该怎么做?这是正确的方法吗?

我已经尝试过使用 JTable,但问题是单元格高度是固定的,并且文本换行是一团糟。

【问题讨论】:

  • 你的问题是?
  • @JBNizet:我刚刚更新了我的问题。谢谢!
  • 如果您希望每个单独的值都可编辑,最好在面板中生成单独的可编辑字段。您可以使用GridLayout 来布置它们。
  • 为什么不使用Map 作为键值对?
  • @NeerajJain:你能解释一下吗?

标签: java swing arraylist


【解决方案1】:

你可以使用GridLayout

Map<String,String> map=new HashMap<String,String>(); //key-Value pair
map.put("cat",""furry\n white"); // \n So that you will get a new line character in text area
map.put("dog","greyhound \n beast");
JFrame frame = new JFrame();
frame.setLayout(new GridLayout(rows,columns));//In your case (map.size,2)
frame.setSize(300, 300);

//Now You need to Iterate through the Map.

for(Map.Entry<String,String>entry:map.entrySet()){
  JTextArea left=JTextArea(entry.getKey());
  JTextArea right=JTextArea(entry.getValue());
  frame.add(left);  //Adding each key to the Frame on left side
  frame.add(right); //This is the value you want in side of key
 }

frame.setVisible(true);

你会得到类似的东西,但格式是可编辑的

我有两个称为键和值的 ArrayList。

keys = {"cat", "dog", "mouse"} 
values = {"furry;white", "greyhound;beast", "little;rat"}

如您所见,您正在分别维护键和值列表,这是一种不好的做法,您可以使用 Map(只需阅读此链接,它会有所帮助)存储 key 并且它对应于 @ 987654327@在一条记录中,

现在有个小建议

如果你想对一个key 使用multiple values,我建议你使用MultiMap,它对一个键维护多个值,这是非常有用的库。

【讨论】:

    【解决方案2】:

    我建议为每个可编辑字段设置单独的JTextField 实例,然后使用GridLayout 对它们进行布局。您的代码最终会使用这种方法来创建一个包含字段的面板。

    public JPanel createPanelForStringMap(Map<String, String> map) {
        JPanel panel = new JPanel(new GridLayout(map.size(), 2));
        for (Map.Entry entry: map.entrySet()) {
            panel.add(new JTextField(entry.getKey()));
            panel.add(new JTextField(entry.getValue()));
        }
        return panel;
    }
    

    当然,您需要添加代码以在值被编辑后对其进行处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-25
      • 2019-08-29
      • 2012-02-04
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      相关资源
      最近更新 更多