2013-03-18 4 views
0

У меня есть JTable с 4-мя колоннами, где последний столбец имеет поле со списком,Состояние Набор для JTable, Java

образец кода

String[] colNames = {"Name","Email","Department","Status"}; 
TableModel model = new DefaultTableModel(colNames,200); 
table.setModel(model); 

TableColumn statusCol = table.getColumnModel().getColumn(3); 
comboBox = new JComboBox(); 
comboBox.addItem("Approver"); 
comboBox.addItem("Senior Manager"); 

statusCol.setCellEditor(new DefaultCellEditor(comboBox)); 

Здесь COMBOBOX имеет 2 варианта утверждающий и старший менеджер, я Я ищу способ добавить условие как, только один старший менеджер в таблице?

+0

please whats 'Я ищу способ добавить условие как, только один старший менеджер в таблице?' Hmmm see my [question about prepareEditor] (http://stackoverflow.com/questions/7045851/jtable-how -prepareeditor-works) – mKorbel

+1

Просьба показать SSCCE, который демонстрирует проблему – kleopatra

ответ

1

Вы должны обработать это в своем домене (например, добавить ограничение, где бы вы не загружали данные в таблицуModel) и ограничить количество старших менеджеров там. Это бизнес-логика, не реализуйте ее в своем графическом интерфейсе.

+1

Спасибо за ур ответ, я сделал это с логикой бизнеса, но условие не удалось, когда пользователь добавил нового сотрудника и изменил статус за раз, он не работает. @Jeroen: Я знаю, что вы имеете в виду, но я подумал, что это хорошая идея реализовать его в графическом интерфейсе. Я хотел бы попробовать с графическим интерфейсом – vijay

1

Предполагая, что ваш TableModel начинается в последовательном состоянии, например. не более одного старшего менеджера, цель состоит в том, чтобы поддерживать этот инвариант, когда редактируется ячейка в столбце три. Жесткая часть - это то, что слушатели вашего TableModel видят любые связанные с этим изменения. Один из подходов состоит в использовании диспетчера объектов, как показано в этом example by @Guillaume Polet. Менеджер запускает PropertyChangeEvent для уведомления слушателя TableModel, когда состояние управляемого объекта изменяется. TableModel, в свою очередь, уведомляет о любом зарегистрированном TableModelListener, например, JTable, через fireTableRowsUpdated().