сфокусируйте проблему с помощью JComboBox в качестве редактора ячейки в JTable

Самое главное - структурировать код, имея 4 вложенных цикла, просто безумие. Попробуйте написать какую-нибудь функцию с хорошим описанием того, что они делают, и не имеют более двух циклов внутри друг друга.

На ваш вопрос, у вас есть if (tokensList.get(e), в то время как e установлен как int e = i - 2, и поскольку i изначально начинается как int i = 0, то вы можете проверить -2 или -1. То же самое касается верхней границы, у вас есть e < i + 4, что на +4 больше, чем размер вашего списка.

9
задан John Murphy 18 February 2009 в 17:49
поделиться

1 ответ

Для понимания этого, необходимо будет понять то, что продолжает доступную для редактирования таблицу. Короткий бит теории:

Каждая ячейка имеет потенциальный рендерер и редактора. Рендерер просто говорит ячейку, как потянуть и не взаимодействует с событиями. Редактор однако является компонентом, который может взаимодействовать с событиями. Когда случай происходит, который инициировал редактирование, компонент редактора добавляется на верхних строках таблицы. Когда редактирование заканчивается, компонент удален.

Чтобы заставить компонент уходить, необходимо будет удостовериться, что ячейка не находится все еще в состоянии "редактирования". Поэтому terminateEditOnFocusLast заставляет JComboBox исчезать. Если Вы захотите другие вещи заставить поле идти, то необходимо будет, вероятно, назвать removeEditor () в ответ на определенные события, возможно сфокусироваться, или выбор ячейки.

Чтобы действительно разобраться, что происходит, я рекомендовал бы иметь беглый взгляд на исходный код к removeEditor (), editCellAt () и т.д., и возможно ступил бы до однажды в отладчик. Возможно, что Вы переопределили часть кода обработки событий или называете его, когда Вы не были должны. Код редактора/обработки событий в JTable довольно хрупок, и довольно легко случайно заставить вызовы происходить в неправильном порядке с забавными побочными эффектами.

Кроме того, Java очень тонко изменил событие и поведение фокуса JTable между версиями однажды, я думаю, что это было между 1,4 и 1.5, когда обработка фокуса для измененного колебания. Таким образом, первой вещью, которую я рекомендовал бы пробовать, является Ваш код с другой версией Java. Ошибка, возможно, была вызвана Sun (часть нашего сложного кода редактора должна была быть изменена), и если это отличается между выпусками, легче сообщить Sun.

11
ответ дан 4 December 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: