将ArrayList内容打印到TextArea中

时间:2015-02-12 07:35:17

标签: java swing arraylist

我有两个名为 keys values 的ArrayLists。

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

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

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

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

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

2 个答案:

答案 0 :(得分: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;
}

当然,您需要添加代码,以便在编辑后对值执行某些操作。

答案 1 :(得分:2)

您可以使用 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);

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

enter image description here

  

我有两个名为keys和values的ArrayLists。

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

正如您所看到的那样,您正在维护单独的键列表和值,这是一种不好的做法,您可以Map(只需阅读此链接,它将会有所帮助)存储key并且它在单个记录中对应value

现在有点建议

如果您想针对一个multiple values使用key,我建议您使用MultiMap来保持针对一个单独密钥的多个值,这是非常有用的库。