/*
* Copyright 2010-2015 Institut Pasteur.
*
* This file is part of Icy.
*
* Icy 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.
*
* Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>.
*/
package icy.gui.component;
import icy.system.thread.ThreadUtil;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
import jxl.Cell;
import jxl.Sheet;
import jxl.write.WritableSheet;
/**
* Excel table view
*
* @author Fabrice de Chaumont, Alexandre Dufour
*/
public class ExcelTable extends JScrollPane
{
private static final long serialVersionUID = 1L;
JTable table;
public ExcelTable()
{
}
public ExcelTable(WritableSheet page)
{
updateSheet(page);
this.setViewportView(table);
this.setAutoscrolls(true);
}
public synchronized void updateSheet(final WritableSheet page)
{
ThreadUtil.invokeLater(new Runnable()
{
@Override
public void run()
{
table = new JTable();
setViewportView(table);
if (page != null)
{
table.setModel(new SheetTableModel(page));
}
}
});
}
private class SheetTableModel implements TableModel
{
private Sheet sheet = null;
public SheetTableModel(Sheet sheet)
{
this.sheet = sheet;
}
@Override
public int getRowCount()
{
return sheet.getRows();
}
@Override
public int getColumnCount()
{
return sheet.getColumns();
}
/**
* Copied from javax.swing.table.AbstractTableModel, to name columns using spreadsheet
* conventions: A, B, C, . Z, AA, AB, etc.
*/
@Override
public String getColumnName(int column)
{
String result = "";
for (; column >= 0; column = column / 26 - 1)
{
result = (char) ((char) (column % 26) + 'A') + result;
}
return result;
}
@Override
public Class<?> getColumnClass(int columnIndex)
{
return String.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return false;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
try
{
Cell cell = sheet.getCell(columnIndex, rowIndex);
return cell.getContents();
}
catch (Exception e)
{
//
}
return null;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
}
@Override
public void addTableModelListener(TableModelListener l)
{
}
@Override
public void removeTableModelListener(TableModelListener l)
{
}
}
}