2016-08-03 4 views
0

Я пишу графический интерфейс. В этом графическом интерфейсе у меня есть раскрывающийся список, в котором я могу выбрать разных лиц. У каждого человека есть панель CardLayout и на этой панели есть таблица с информацией о себе и вещах, которыми они владеют.Разделение нескольких JTables

Я написал класс под названием PanelTableItems(Person person).

В начале программы я использую этот класс для создания mutliple этих таблиц (по одному для каждого человека в моей программе). И каждая панель CardLayout имеет одну из этих таблиц. Я только что внедрил ListSelectionListener, чтобы сохранить последнюю выбранную строку, в которой я использую частную функцию, чтобы получить выбранный элемент из таблицы. Однако, когда я реализовал этот приемник выбора, я попытался с печатью, и по какой-то причине кажется, что если у меня есть два человека в моей программе, слушатель выбора сделал два отпечатка, даже если «вторая» таблица не была видна и поэтому не выбрана.

Вот мой вопрос:

Как убедиться, что только работать таблицы, которая в настоящее время в «вид», используя CardLayout? Вторая панель скрыта, но кажется, что все вызовы функций первой панели также управляются на втором, так как они одного типа.

Я могу опубликовать MCVE, но это скорее теоретический вопрос, чем вопрос, связанный с реальным кодированием.

Заранее спасибо.

+0

для меня «У каждого человека есть панель CardLayout и в этой панели есть таблица с информацией о себе и вещах, которыми они владеют». == JTable с RowFilter вместо 'И каждая панель CardLayout имеет одну из этих таблиц. ', Потому что вы можно удалить столбец из представления JTables, данные по-прежнему доступны из модели, там вы можете хранить кучу данных. – mKorbel

ответ

3

При выборе человека, можно просто переключить видимую панель с:

CardLayout cl = (CardLayout) cards.getLayout(); 
cl.show(cards, "idOfTheSelectedPersonPanel"); 

Итак, вы должны быть зарегистрированы эти панели уже в макете каждый один с другим идентификатором в отношении лица, которое оно представляет.

Скрытые (невидимые) панели не получают никакого ввода пользователя - если вы видите такое поведение, то ваш код делает что-то неправильно.

В ListSelectionListener вам необходимо фильтровать, чтобы обрабатывать только события, которые выбраны для чего-то нового.

+0

После рассмотрения моего кода снова я нашел, что вы говорите правильно. И да, это был мой ListSelectionListener, который заставил меня не знать, что происходит, поскольку казалось, что он отвечает за оба jtables, когда в исходной таблице было выбрано что-то новое. Однако я не знаю, почему. – Zeliax

0

Я предлагаю вам перепроверить, как вы добавляете компоненты к своим картам, возможно, вы добавляете все таблицы в один и тот же контейнер, ведь только один из них видится, попробуйте добавить каждую таблицу в JPanel или JScrollPane.

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

  • Нет связанных вопросов^_^