2015-02-12 4 views
0

У меня есть два ArrayLists, называемые ключами и значениями.Печать содержимого ArrayList в TextArea

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

Я хотел бы иметь их напечатан в JTextArea (так как я хочу, чтобы они были доступны для редактирования) или любой другой компонент GUI, как это:

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

Должен ли я создать новый TextArea динамически для каждого запись? Если да, то как мне это сделать? Это правильный подход?

Я уже пробовал использовать JTable, но проблема в том, что высота ячейки фиксирована, а перенос текста - беспорядок.

+0

И ваш вопрос? –

+0

@JBNizet: Я только что обновил свой вопрос. Благодаря! – summerNight

+0

Если вы хотите, чтобы каждое отдельное значение редактировалось, вам лучше было бы создавать отдельные редактируемые поля внутри панели. Вы можете выложить их с помощью 'GridLayout'. – sprinter

ответ

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

У меня есть два ArrayLists называемых ключей и значений.

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

Как вы можете видеть, вы поддерживаете список ключей и стоимости отдельно, которая является плохой практикой, вы можете иметь Map (просто прочитать эту ссылку, Виль быть полезным), который хранит key и это соответствующая value в одной записи,

Теперь немного Suggestion

Если вы хотите использовать multiple values против одного key я СУГ предположите, что вы используете 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; 
} 

Естественно, вам нужно будет добавить код, чтобы сделать что-то со значениями после их редактирования.

Смежные вопросы