/*
Copyright (C) 2011 Diego Darriba, David Posada
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, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package es.uvigo.darwin.jmodeltest.gui;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Point;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
import es.uvigo.darwin.jmodeltest.utilities.MyTableCellRenderer;
import es.uvigo.darwin.jmodeltest.utilities.MyTableModel;
import es.uvigo.darwin.jmodeltest.utilities.TableSorter;
public class FrameResults extends JModelTestFrame {
public static final int TAB_AIC = 1;
public static final int TAB_AICc = 2;
public static final int TAB_BIC = 3;
public static final int TAB_DT = 4;
private static final Dimension TABBED_PANE_DIM = new Dimension(700+100, 400-20);
private static final Dimension SCROLL_PANE_DIM = new Dimension(670+100, 320);
private static final Dimension PANEL_INFO_DIM = new Dimension(700+100, 30);
private static final Dimension LABEL_INFO_DIM = new Dimension(680+100, 20);
private static final Dimension LABEL_DATE_DIM = new Dimension(200+100, 20);
private static final Dimension FRAME_DIM = new Dimension(700+100, 460);
private static final long serialVersionUID = 7368405541555631433L;
private javax.swing.JPanel panelInfo = new javax.swing.JPanel();
private javax.swing.JLabel labelInfo = new javax.swing.JLabel();
private javax.swing.JLabel labelDate = new javax.swing.JLabel();
private javax.swing.JTabbedPane tabbedPane = new javax.swing.JTabbedPane();
private javax.swing.JPanel panelModels = new javax.swing.JPanel();
private javax.swing.JScrollPane scrollPaneModels = new javax.swing.JScrollPane();
private javax.swing.JTable tableModels = new javax.swing.JTable();
private javax.swing.JPanel panelAIC = new javax.swing.JPanel();
private javax.swing.JScrollPane scrollPaneAIC = new javax.swing.JScrollPane();
private javax.swing.JTable tableAIC = new javax.swing.JTable();
private javax.swing.JPanel panelAICc = new javax.swing.JPanel();
private javax.swing.JScrollPane scrollPaneAICc = new javax.swing.JScrollPane();
private javax.swing.JTable tableAICc = new javax.swing.JTable();
private javax.swing.JPanel panelBIC = new javax.swing.JPanel();
private javax.swing.JScrollPane scrollPaneBIC = new javax.swing.JScrollPane();
private javax.swing.JTable tableBIC = new javax.swing.JTable();
private javax.swing.JPanel panelDT = new javax.swing.JPanel();
private javax.swing.JScrollPane scrollPaneDT = new javax.swing.JScrollPane();
private javax.swing.JTable tableDT = new javax.swing.JTable();
private MyTableModel modelModels = new MyTableModel("Model", options.getNumModels());
TableSorter sorterModels = new TableSorter(modelModels);
JTable tempTableModels = new JTable(sorterModels);
private MyTableModel modelAIC = new MyTableModel("AIC", options.getNumModels());
TableSorter sorterAIC = new TableSorter(modelAIC);
JTable tempTableAIC = new JTable(sorterAIC);
MyTableCellRenderer AICRenderer = new MyTableCellRenderer(tempTableAIC,"AIC");
private MyTableModel modelAICc = new MyTableModel("AICc", options.getNumModels());
TableSorter sorterAICc = new TableSorter(modelAICc);
JTable tempTableAICc = new JTable(sorterAICc);
MyTableCellRenderer AICcRenderer = new MyTableCellRenderer(tempTableAICc,"AICc");
private MyTableModel modelBIC = new MyTableModel("BIC", options.getNumModels());
TableSorter sorterBIC = new TableSorter(modelBIC);
JTable tempTableBIC = new JTable(sorterBIC);
MyTableCellRenderer BICRenderer = new MyTableCellRenderer(tempTableBIC,"BIC");
private MyTableModel modelDT = new MyTableModel("DT", options.getNumModels());
TableSorter sorterDT = new TableSorter(modelDT);
JTable tempTableDT = new JTable(sorterDT);
MyTableCellRenderer DTRenderer = new MyTableCellRenderer(tempTableDT,"DT");
public void initComponents() throws Exception {
tableModels = tempTableModels;
tableAIC = tempTableAIC;
tableAICc = tempTableAICc;
tableBIC = tempTableBIC;
tableDT = tempTableDT;
// set format for all columns
for (int i = 0; i < 8; i++)
{
TableColumn AICtableColumn = tableAIC.getColumnModel().getColumn(i);
AICtableColumn.setCellRenderer((javax.swing.table.TableCellRenderer) AICRenderer);
TableColumn AICctableColumn = tableAICc.getColumnModel().getColumn(i);
AICctableColumn.setCellRenderer((javax.swing.table.TableCellRenderer) AICcRenderer);
TableColumn BICtableColumn = tableBIC.getColumnModel().getColumn(i);
BICtableColumn.setCellRenderer((javax.swing.table.TableCellRenderer) BICRenderer);
TableColumn DTtableColumn = tableDT.getColumnModel().getColumn(i);
DTtableColumn.setCellRenderer((javax.swing.table.TableCellRenderer) DTRenderer);
}
panelInfo.setSize(PANEL_INFO_DIM);
panelInfo.setLocation(new java.awt.Point(0, 390));
panelInfo.setVisible(true);
panelInfo.setLayout(null);
labelInfo.setSize(LABEL_INFO_DIM);
labelInfo.setLocation(new java.awt.Point(40, 0));
labelInfo.setVisible(true);
labelInfo.setText("Decimal numbers are rounded. Click on column headers to sort data in ascending or descending order (+Shift)");
labelInfo.setForeground(java.awt.Color.gray);
labelInfo.setHorizontalTextPosition(javax.swing.JLabel.CENTER);
labelInfo.setFont(XManager.FONT_LABEL_BIG);
labelDate.setSize(LABEL_DATE_DIM);
labelDate.setLocation(new java.awt.Point(40, 10));
labelDate.setVisible(true);
labelDate.setText("Date");
labelDate.setForeground(java.awt.Color.gray);
labelDate.setFont(XManager.FONT_LABEL_BIG);
tabbedPane.setSize(TABBED_PANE_DIM);
tabbedPane.setLocation(new java.awt.Point(0, 0));
tabbedPane.setVisible(true);
tabbedPane.setAutoscrolls(true);
panelModels.setVisible(true);
panelModels.setLayout(null);
panelModels.setFont(XManager.FONT_CONSOLE);
scrollPaneModels.setSize(SCROLL_PANE_DIM);
scrollPaneModels.setLocation(new java.awt.Point(12, 14));
scrollPaneModels.setVisible(true);
scrollPaneModels.setAutoscrolls(true);
scrollPaneModels.setForeground(java.awt.Color.blue);
scrollPaneModels.setBackground(null);
scrollPaneModels.setFont(XManager.FONT_TABULAR);
tableModels.setColumnSelectionAllowed(true);
tableModels.setToolTipText("Click and Shift+Click on headers to order up and down");
tableModels.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
tableModels.setCellSelectionEnabled(true);
tableModels.setVisible(true);
tableModels.setPreferredScrollableViewportSize(new java.awt.Dimension(600, 300));
tableModels.setGridColor(java.awt.Color.gray);
tableModels.setFont(XManager.FONT_TABULAR);
panelAIC.setVisible(true);
panelAIC.setLayout(null);
scrollPaneAIC.setSize(SCROLL_PANE_DIM);
scrollPaneAIC.setLocation(new java.awt.Point(12, 14));
scrollPaneAIC.setVisible(true);
scrollPaneAIC.setAutoscrolls(true);
scrollPaneAIC.setForeground(java.awt.Color.blue);
scrollPaneAIC.setBackground(null);
scrollPaneAIC.setFont(XManager.FONT_TABULAR);
tableAIC.setColumnSelectionAllowed(true);
tableAIC.setToolTipText("Click and Shift+Click on headers to order up and down");
tableAIC.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
tableAIC.setCellSelectionEnabled(true);
tableAIC.setVisible(true);
tableAIC.setPreferredScrollableViewportSize(new java.awt.Dimension(675, 350));
tableAIC.setGridColor(java.awt.Color.gray);
tableAIC.setFont(XManager.FONT_TABULAR);
panelAICc.setVisible(true);
panelAICc.setLayout(null);
scrollPaneAICc.setSize(SCROLL_PANE_DIM);
scrollPaneAICc.setLocation(new java.awt.Point(12, 14));
scrollPaneAICc.setVisible(true);
scrollPaneAICc.setAutoscrolls(true);
scrollPaneAICc.setForeground(java.awt.Color.blue);
scrollPaneAICc.setBackground(null);
scrollPaneAICc.setFont(XManager.FONT_TABULAR);
tableAICc.setColumnSelectionAllowed(true);
tableAICc.setToolTipText("Click and Shift+Click on headers to order up and down");
tableAICc.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
tableAICc.setCellSelectionEnabled(true);
tableAICc.setVisible(true);
tableAICc.setPreferredScrollableViewportSize(new java.awt.Dimension(675, 350));
tableAICc.setGridColor(java.awt.Color.gray);
tableAICc.setFont(XManager.FONT_TABULAR);
panelBIC.setVisible(true);
panelBIC.setLayout(null);
scrollPaneBIC.setSize(SCROLL_PANE_DIM);
scrollPaneBIC.setLocation(new java.awt.Point(12, 14));
scrollPaneBIC.setVisible(true);
scrollPaneBIC.setAutoscrolls(true);
scrollPaneBIC.setForeground(java.awt.Color.blue);
scrollPaneBIC.setBackground(null);
scrollPaneBIC.setFont(XManager.FONT_TABULAR);
tableBIC.setColumnSelectionAllowed(true);
tableBIC.setToolTipText("Click and Shift+Click on headers to order up and down");
tableBIC.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
tableBIC.setCellSelectionEnabled(true);
tableBIC.setVisible(true);
tableBIC.setPreferredScrollableViewportSize(new java.awt.Dimension(675, 350));
tableBIC.setGridColor(java.awt.Color.gray);
tableBIC.setFont(XManager.FONT_TABULAR);
panelDT.setVisible(true);
panelDT.setLayout(null);
scrollPaneDT.setSize(SCROLL_PANE_DIM);
scrollPaneDT.setLocation(new java.awt.Point(12, 14));
scrollPaneDT.setVisible(true);
scrollPaneDT.setAutoscrolls(true);
scrollPaneDT.setForeground(java.awt.Color.blue);
scrollPaneDT.setBackground(null);
scrollPaneDT.setFont(XManager.FONT_TABULAR);
tableDT.setColumnSelectionAllowed(true);
tableDT.setToolTipText("Click and Shift+Click on headers to order up and down");
tableDT.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
tableDT.setCellSelectionEnabled(true);
tableDT.setVisible(true);
tableDT.setPreferredScrollableViewportSize(new java.awt.Dimension(675, 350));
tableDT.setGridColor(java.awt.Color.gray);
tableDT.setFont(XManager.FONT_TABULAR);
setLocation(new java.awt.Point(281, 80));
setResizable(true);
setFont(XManager.FONT_TABULAR);
setLayout(null);
setTitle("Results");
setResizable(false);
panelInfo.add(labelInfo);
panelInfo.add(labelDate);
tabbedPane.add(panelModels);
tabbedPane.setTitleAt(tabbedPane.getTabCount() - 1, "Models");
tabbedPane.add(panelAIC);
tabbedPane.setTitleAt(tabbedPane.getTabCount() - 1, "AIC");
tabbedPane.setEnabledAt(tabbedPane.getTabCount() - 1, false);
tabbedPane.setForegroundAt(tabbedPane.getTabCount() - 1, Color.gray);
tabbedPane.add(panelAICc);
tabbedPane.setTitleAt(tabbedPane.getTabCount() - 1, "AICc");
tabbedPane.setEnabledAt(tabbedPane.getTabCount() - 1, false);
tabbedPane.setForegroundAt(tabbedPane.getTabCount() - 1, Color.gray);
tabbedPane.add(panelBIC);
tabbedPane.setTitleAt(tabbedPane.getTabCount() - 1, "BIC");
tabbedPane.setEnabledAt(tabbedPane.getTabCount() - 1, false);
tabbedPane.setForegroundAt(tabbedPane.getTabCount() - 1, Color.gray);
tabbedPane.add(panelDT);
tabbedPane.setTitleAt(tabbedPane.getTabCount() - 1, "DT");
tabbedPane.setEnabledAt(tabbedPane.getTabCount() - 1, false);
tabbedPane.setForegroundAt(tabbedPane.getTabCount() - 1, Color.gray);
panelModels.add(scrollPaneModels);
scrollPaneModels.getViewport().add(tableModels);
panelAIC.add(scrollPaneAIC);
scrollPaneAIC.getViewport().add(tableAIC);
panelAICc.add(scrollPaneAICc);
scrollPaneAICc.getViewport().add(tableAICc);
panelBIC.add(scrollPaneBIC);
scrollPaneBIC.getViewport().add(tableBIC);
panelDT.add(scrollPaneDT);
scrollPaneDT.getViewport().add(tableDT);
add(panelInfo);
add(tabbedPane);
tabbedPane.setSelectedIndex(0);
setSize(FRAME_DIM);
// event handling
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
thisWindowClosing(e);
}
});
sorterModels.addMouseListenerToHeaderInTable(tableModels);
sorterAIC.addMouseListenerToHeaderInTable(tableAIC);
sorterAICc.addMouseListenerToHeaderInTable(tableAICc);
sorterBIC.addMouseListenerToHeaderInTable(tableBIC);
sorterDT.addMouseListenerToHeaderInTable(tableDT);
// set date
Date today = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("dd MMMMM yyyy");
String datenewformat = formatter.format(today);
labelDate.setText(datenewformat);
}
private boolean mShown = false;
public void addNotify() {
super.addNotify();
if (mShown)
return;
// move components to account for insets
Insets insets = getInsets();
Component[] components = getComponents();
for (int i = 0; i < components.length; i++) {
Point location = components[i].getLocation();
location.move(location.x, location.y + insets.top);
components[i].setLocation(location);
}
mShown = true;
}
// Close the window when the close box is clicked
void thisWindowClosing(java.awt.event.WindowEvent e) {
setVisible(false);
dispose();
//System.exit(0);
}
public void enablePane(int pane) {
tabbedPane.setEnabledAt(pane, true);
tabbedPane.setForegroundAt(pane, Color.black);
}
public void disablePane(int pane) {
tabbedPane.setEnabledAt(pane, false);
tabbedPane.setForegroundAt(pane, Color.gray);
}
public void populate(int pane) {
switch(pane) {
case TAB_AIC:
modelAIC.populate("AIC");
break;
case TAB_AICc:
modelAICc.populate("AICc");
break;
case TAB_BIC:
modelBIC.populate("BIC");
break;
case TAB_DT:
modelDT.populate("DT");
break;
}
}
}