@@ -0,0 +1,1483 @@
+package devopsdistilled.operp.client.items.panes;%0A%0Aimport java.util.List;%0A%0Aimport javax.swing.JComponent;%0Aimport javax.swing.JPanel;%0Aimport javax.swing.JScrollPane;%0Aimport javax.swing.JTable;%0A%0Aimport net.miginfocom.swing.MigLayout;%0Aimport devopsdistilled.operp.client.abstracts.SubTaskPane;%0Aimport devopsdistilled.operp.client.abstracts.libs.BeanTableModel;%0Aimport devopsdistilled.operp.client.items.models.observers.CategoryModelObserver;%0Aimport devopsdistilled.operp.client.items.panes.models.observers.ListCategoryPaneModelObserver;%0Aimport devopsdistilled.operp.server.data.entity.items.Category;%0A%0Apublic class ListCategoryPane extends SubTaskPane implements%0A%09%09ListCategoryPaneModelObserver, CategoryModelObserver %7B%0A%0A%09private final JPanel pane;%0A%0A%09private final JTable table;%0A%09BeanTableModel%3CCategory%3E tableModel;%0A%0A%09public ListCategoryPane() %7B%0A%09%09pane = new JPanel(new MigLayout(%22debug, fill%22));%0A%0A%09%09tableModel = new BeanTableModel%3C%3E(Category.class);%0A%09%09table = new JTable(tableModel);%0A%0A%09%09final JScrollPane scrollPane = new JScrollPane(table,%0A%09%09%09%09JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,%0A%09%09%09%09JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);%0A%0A%09%09pane.add(scrollPane, %22grow%22);%0A%09%7D%0A%0A%09@Override%0A%09public JComponent getPane() %7B%0A%09%09return pane;%0A%09%7D%0A%0A%09@Override%0A%09public void updateCategories(List%3CCategory%3E categories) %7B%0A%09%09if (tableModel.getRowCount() != 0) %7B%0A%09%09%09int lastRow = tableModel.getRowCount() - 1;%0A%09%09%09tableModel.removeRowRange(0, lastRow);%0A%09%09%7D%0A%0A%09%09tableModel.insertRows(0, categories);%0A%09%7D%0A%7D%0A

Create ListCategoryPane