Skip to content
Snippets Groups Projects
Commit 2d9f0c0c authored by tjc's avatar tjc
Browse files

add TableViewer to display data in JTable

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@16069 ee4ac58c-ac51-4696-9907-e4b3aa274f04
parent 2aa247db
No related branches found
No related tags found
No related merge requests found
......@@ -30,7 +30,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.net.URL;
import java.util.Comparator;
import java.util.List;
import java.util.Vector;
......@@ -38,12 +37,7 @@ import javax.swing.Box;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import uk.ac.sanger.artemis.Entry;
import uk.ac.sanger.artemis.EntryGroup;
......@@ -59,7 +53,6 @@ import uk.ac.sanger.artemis.components.FileViewer;
import uk.ac.sanger.artemis.components.MessageDialog;
import uk.ac.sanger.artemis.components.SequenceViewer;
import uk.ac.sanger.artemis.components.StickyFileChooser;
import uk.ac.sanger.artemis.components.variant.BCFReader.BCFReaderIterator;
import uk.ac.sanger.artemis.io.DocumentEntry;
import uk.ac.sanger.artemis.io.EntryInformationException;
import uk.ac.sanger.artemis.io.Key;
......@@ -635,6 +628,14 @@ class IOUtils
protected static void countVariants(final VCFview vcfView,
final FeatureVector features) throws IOException
{
if(features.size () < 1)
{
JOptionPane.showMessageDialog(null,
"No features selected.",
"Warning", JOptionPane.WARNING_MESSAGE);
return;
}
String[] columnNames = {
"VCF", "Name", "Variant", "Non-variant", "Deletion", "Insertion", "Synonymous", "Non-synonymous"};
Vector<String> columnData = new Vector<String>();
......@@ -705,25 +706,9 @@ class IOUtils
}
}
JTable variantData = new JTable(rowData, columnData);
TableRowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(variantData.getModel());
variantData.setRowSorter(sorter);
Comparator<Integer> comparator = new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
return i1.compareTo(i2);
}
};
TableViewer tab = new TableViewer(rowData, columnData, "Variant Overview");
for(int i=2; i< columnData.size(); i++)
sorter.setComparator(i, comparator);
JScrollPane jsp = new JScrollPane(variantData);
JFrame f = new JFrame("Variant Overview");
f.getContentPane().add(jsp);
f.pack();
f.setVisible(true);
tab.setIntegerRowSorter(i);
}
private static void count(VCFRecord record, int count[], FeatureVector features, AbstractVCFReader reader)
......
/* TableViewer
*
* created: 2011
*
* This file is part of Artemis
*
* Copyright(C) 2011 Genome Research Limited
*
* 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 2
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package uk.ac.sanger.artemis.components.variant;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Comparator;
import java.util.Vector;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import uk.ac.sanger.artemis.components.StickyFileChooser;
class TableViewer extends JFrame
{
private static final long serialVersionUID = 1L;
private Comparator<Integer> comparator = new Comparator<Integer>()
{
public int compare(Integer i1, Integer i2)
{
return i1.compareTo(i2);
}
};
private TableRowSorter<TableModel> sorter;
public TableViewer(final Vector<Vector<Object>> rowData, final Vector<String> columnData, String title)
{
super(title);
final JTable variantData = new JTable(rowData, columnData);
sorter = new TableRowSorter<TableModel>(variantData.getModel());
variantData.setRowSorter(sorter);
final JFrame f = new JFrame("Variant Overview");
final JScrollPane jsp = new JScrollPane(variantData);
final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
jsp.setPreferredSize(new Dimension(screen.width/3, screen.height/3));
final JPanel overviewPane = new JPanel(new BorderLayout());
overviewPane.add(jsp, BorderLayout.CENTER);
final Box xBox = Box.createHorizontalBox();
xBox.add(Box.createHorizontalGlue());
final JButton save = new JButton("SAVE");
save.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
save(variantData, columnData);
}
});
xBox.add(save);
final JButton close = new JButton("CLOSE");
close.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
f.dispose();
}
});
xBox.add(close);
overviewPane.add(xBox, BorderLayout.SOUTH);
f.getContentPane().add(overviewPane);
f.pack();
f.setVisible(true);
}
public void setIntegerRowSorter(int colIndex)
{
sorter.setComparator(colIndex, comparator);
}
private void save(final JTable table, final Vector<String> columnData)
{
StickyFileChooser fc = new StickyFileChooser();
int status = fc.showSaveDialog(TableViewer.this);
if(status != StickyFileChooser.APPROVE_OPTION)
return;
try
{
File f = fc.getSelectedFile();
if(f.exists())
{
status = JOptionPane.showConfirmDialog(TableViewer.this,
f.getName()+" exists overwrite?", "Overwrite", JOptionPane.YES_NO_OPTION);
if(status != JOptionPane.YES_OPTION)
return;
}
FileWriter writer = new FileWriter(fc.getSelectedFile());
for(String col: columnData)
writer.write(col+"\t");
writer.write("\n");
int nrows = table.getRowCount();
int ncols = table.getColumnCount();
for(int i=0; i<nrows; i++)
{
for(int j=0; j<ncols; j++)
{
// use the sorted row index
int rowIndex = table.convertRowIndexToModel(i);
writer.write(table.getModel().getValueAt(rowIndex, j)+"\t");
}
writer.write("\n");
}
writer.close();
}
catch (IOException e1)
{
JOptionPane.showMessageDialog(TableViewer.this, e1.getMessage(),
"Problem Writing", JOptionPane.ERROR_MESSAGE);
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment