ОБНОВЛЕНО # 2
Объяснение в ответе Голубого Луны.
Альтернативные решения:
Устранить echo
while read line; do
...
done <<EOT
first line
second line
third line
EOT
Добавить эхо внутри документа here-is-document
while read line; do
...
done <<EOT
$(echo -e $lines)
EOT
Запустить echo
в фоновом режиме:
coproc echo -e $lines
while read -u ${COPROC[0]} line; do
...
done
Перенаправить на дескриптор файла явно (Mind the space в < <
!):
exec 3< <(echo -e $lines)
while read -u 3 line; do
...
done
Или просто перенаправить на stdin
:
while read line; do
...
done < <(echo -e $lines)
И один для chepner
(исключая echo
):
arr=("first line" "second line" "third line");
for((i=0;i<${#arr[*]};++i)) { line=${arr[i]};
...
}
Переменная $lines
может быть преобразована в массив без запуска новой под-оболочки. Символы \
и n
должны быть преобразованы в некоторый символ (например, настоящий новый символ строки) и использовать переменную IFS (Internal Field Separator) для разделения строки на элементы массива. Это можно сделать так:
lines="first line\nsecond line\nthird line"
echo "$lines"
OIFS="$IFS"
IFS=$'\n' arr=(${lines//\\n/$'\n'}) # Conversion
IFS="$OIFS"
echo "${arr[@]}", Length: ${#arr[*]}
set|grep ^arr
Результат
first line\nsecond line\nthird line
first line second line third line, Length: 3
arr=([0]="first line" [1]="second line" [2]="third line")
попробуйте что-то вроде этого. он будет работать нормально
DefaultListModel dlm = new DefaultListModel();
jButtonActionPerformed {
jList2.setModel(dlm);
jList1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
for (Iterator it = jList1.getSelectedValuesList().iterator(); it.hasNext();) {
String sel = (String) it.next();
if (dlm.contains(sel)) {
} else {
dlm.addElement(sel);
}
}
}
, поскольку вы не показываете какой-либо код, я могу сказать следующее:
, предполагая, что вы используете, например, массивList из настраиваемых объектов в качестве источника данных для каждого списка, вы можете есть кнопка, которая при нажатии получает индекс выбранного элемента, захватывает этот объект, а затем добавляет его в другой список.
method for the pressed button event (){
arrayList2.add(arrayList1.get(jList1.getSelectedIndex());
}
после этого вы можете просто перезагрузить модель в jlist2, чтобы она показывала новые данные.
надеюсь, что это поможет
Начните с просмотра JList#getSelectedValuesList
(или JList#getSelectedValues
, если вы используете Java 6 или ранее)
Вы будете то необходимо применить эти значения ко второй модели JList
. Как вы это сделаете, это будет зависеть от модели, которую вы уже используете ...