Вероятно, было бы проще реализовать это с помощью решения JList
, которое вы упомянули, поэтому я дам вам несколько советов по этому поводу (я не очень разбираюсь в D&D).
По сути, вы хотите иметь три компонента: JList
и два (один вверх, один вниз) JButton
. Вам также, вероятно, понадобится настраиваемая модель списка. Если вы не знакомы с моделями или моделями списков, ознакомьтесь с этим руководством а>. В противном случае читайте дальше.
В классе модели списка (например, ReorderableListModel
) определите два метода: public void moveUp(int index)
и public void moveDown(int index)
.
Код для moveUp
выглядит следующим образом:
if (index > 0) { // error checking
// Swap the given index with the previous index.
// (where `list` is the name of your list variable)
Collections.swap(list, index, index - 1);
}
// Finally, notify the `JList` that the list structure has changed.
fireContentsChanged(this, index - 1, index);
moveDown
похоже:
if (index < getSize() - 1) {
Collections.swap(list, index, index + 1);
}
fireContentsChanged(this, index, index + 1);
Теперь нам нужно реализовать прослушиватели действий для кнопок. Для кнопки вверх попробуйте этот код слушателя:
// First, move the item up in the list.
listModel.moveUp(list.getSelectedIndex());
// Now, set the selection index to keep the same item selected.
//
// If you use the default list selection interval, setting the index to -1
// will do nothing (so it's okay, we don't need error checking here).
list.setSelectedIndex(list.getSelectedIndex() - 1);
Добавьте аналогичный метод «движения вниз», и все готово!
Что касается «мгновенного обновления графического отображения при каждом щелчке», это то, что делает метод fireContentsChanged
в классе модели. JList
сделает обновление за вас.
person
wchargin
schedule
11.03.2013