#java #swing #jython-2.7
#java #swing #jython-2.7
Вопрос:
Я пытаюсь скопировать выбранные строки Swing JTable, используя Jython. Событие копирования происходит по щелчку мыши, поэтому отправной точкой являются выбранные строки, а конечная цель — скопировать их под ними.
Я пытался, но я придумал «чрезвычайно» обременительный алгоритм, который делает не совсем то, что я хочу (скопируйте выбранные, а не ниже …!)
def copySelectedLine(self, e):
model = self.table.getModel()
dataVector = model.getDataVector()
rowsToCopy = self.table.getSelectedRows()
for adder, r in enumerate(rowsToCopy):
r = r adder
newDataVector = dataVector[:r] [([model.getValueAt(r, c) for c in xrange(3)] [
'', '', '', '', '', ''])] dataVector[r:] # personal concatenation
model.setRowCount(0)
for nr in newDataVector:
model.addRow(nr)
Я принимаю предложение также на Java.
Заранее спасибо!
Комментарии:
1. То есть вы имеете в виду, что у вас есть что-то вроде строк A, B, C, D, и если A и C копируются, вы тогда хотите A, A’, B, C, C’, D?
2. Точно, @Thomas!!
3. Вы уже выполнили свой код с помощью отладчика? Если нет, я предлагаю вам сделать это. Кстати, я не разработчик Python, и я не знаю Jython, поэтому я не могу прокомментировать ваш код, но разве отступы не описывают блоки? Таким образом, ваш код выглядит так, как будто он использует циклы для построения новой модели и сброса модели. Это может быть проблемой с вашим кодом. Также я не знаю, будет ли
setRowCount(0)
на самом деле усекать полученный вами вектор данных (и удалять строки thw), поэтому вам может потребоваться сделать копию существующих строк перед вызовом этого метода.4. @Thomas решен…
Ответ №1:
Простота — это самое сложное. Massimiliano Allegri
def copySelectedLine(self, e):
model = self.table.getModel()
rowsToCopy = self.table.getSelectedRows()
for adder, r in enumerate(rowsToCopy):
i = r adder 1
model.insertRow(i, [model.getValueAt(r, c) for c in xrange(3)])
PS: Странно, что я ответил первым…