private Component createTable(List<HarvestConfig.Harvest> harvests) { tableModel = new HarvestTableModel(harvests); final JTable table = new JTable(tableModel, HarvestTask.getTableColumnModel(tableModel.getCellRenderer())); table .getModel() .addTableModelListener( new TableModelListener() { public void tableChanged(TableModelEvent event) { int row = table.getSelectedRow(); selectedTask = ((HarvestTableModel) table.getModel()).getRow(row); setEnablement(); } }); table .getTableHeader() .addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent mouseEvent) { TableColumnModel columnModel = table.getColumnModel(); int viewColumn = columnModel.getColumnIndexAtX(mouseEvent.getX()); int column = table.convertColumnIndexToModel(viewColumn); if (mouseEvent.getClickCount() == 1 && column != -1) { ((HarvestTableModel) table.getModel()).sortOn(column); } } }); table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table .getSelectionModel() .addListSelectionListener( new ListSelectionListener() { public void valueChanged(ListSelectionEvent event) { int row = table.getSelectedRow(); selectedTask = ((HarvestTableModel) table.getModel()).getRow(row); if (selectedTask != null) { fetchLocalLog(); } setEnablement(); } }); JScrollPane pane = new JScrollPane( table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); pane.setPreferredSize(new Dimension(800, 300)); return pane; }