/* * This file is a part of EpnTAPClient. * This program aims to provide EPN-TAP support for software clients, like CASSIS spectrum analyzer. * See draft specifications: https://voparis-confluence.obspm.fr/pages/viewpage.action?pageId=559861 * Copyright (C) 2016 Institut de Recherche en Astrophysique et Planétologie. * * This program is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, or (at your option) any later * version. This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. You should have received a copy of * the GNU General Public License along with this program. If not, see * <http://www.gnu.org/licenses/>. */ package eu.omp.irap.vespa.votable.view; import java.awt.BorderLayout; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ScrollPaneConstants; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; import eu.omp.irap.vespa.votable.votabledata.VOTableData; /** * The main class of the View of the application. * * @author N. Jourdane */ public class VOTableView extends JPanel implements TableModelListener { /** The serial version UID. */ private static final long serialVersionUID = 1L; /** The JTable component where the data are displayed. */ private JTable table; /** The DataModel representing the VOTable data in the JTable element. */ private DefaultTableModel tableData; /** * Method constructor */ // TODO public VOTableView(VOTableViewListener listener) -> listen for select events public VOTableView() { tableData = new DefaultTableModel() { /** The serial version UID. */ private static final long serialVersionUID = 1L; @Override public boolean isCellEditable(int row, int column) { return false; } }; table = new JTable(tableData); table.setAutoCreateColumnsFromModel(true); buildVOTableView(); } private void buildVOTableView() { setLayout(new BorderLayout()); table.setRowSorter(new TableRowSorter<TableModel>(tableData)); add(new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER); } /** * Fill the JTable. * * @param columns the column names * @param data The VoTable data displayed on the JTable */ public void fillTable(VOTableData data) { String[] columns = data.getColumnsName(); Object[][] rows = data.getDataArray(); tableData.setDataVector(rows, columns); if (rows.length != 0) { table.setRowSelectionInterval(0, 0); } if (columns.length >= 10) { table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); } } /** * @return The JTable element. */ public JTable getTable() { return table; } /** * @param column The column index of the data to get. * @param row The row index of the data to get. * @return The element, can be a String, a integer or something else, according to the voTable * content. */ public Object getValueAt(int column, int row) { return tableData.getValueAt(row, column); } @Override public void tableChanged(TableModelEvent e) { if (e.getType() != TableModelEvent.UPDATE) { return; } } }