Skip to content

Instantly share code, notes, and snippets.

@behrangsa
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save behrangsa/59cfca1ad5ff708b284f to your computer and use it in GitHub Desktop.
Save behrangsa/59cfca1ad5ff708b284f to your computer and use it in GitHub Desktop.
TablePanel (retrieved via web.archive.org)
import javax.swing.*;
import javax.swing.event.TableColumnModelListener;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import javax.swing.table.DefaultTableColumnModel;
import java.awt.*;
/**
* Created by IntelliJ IDEA.
* User: Behrang Saeedzadeh
* Date: Jul 28, 2003
* Time: 5:14:43 PM
* To change this template use Options | File Templates.
*/
public class TablePanel extends JPanel
{
private JTable table;
private int[][] footerSpan;
private JTableHeader header;
private JTableHeader footer;
private FooterAdjuster adjuster;
public TablePanel(JTable table, int[][] footerSpan) {
this.table = table;
this.footerSpan = footerSpan;
footer = new JTableHeader();
header = table.getTableHeader();
adjuster = new FooterAdjuster();
header.setReorderingAllowed(false);
setLayout(new BorderLayout());
add(table, BorderLayout.CENTER);
add(footer, BorderLayout.SOUTH);
add(header, BorderLayout.NORTH);
initFooter();
table.getColumnModel().addColumnModelListener(adjuster);
}
public TablePanel() {
this(new JTable(), new int[][]{});
}
private void initFooter() {
DefaultTableColumnModel colModel = new DefaultTableColumnModel();
for (int i = 0; i < footerSpan.length; i++) {
TableColumn column = new TableColumn();
colModel.addColumn(column);
}
footer.setColumnModel(colModel);
footer.setResizingAllowed(false);
footer.setReorderingAllowed(false);
}
public void setFooterValue(int index, Object value) {
DefaultTableColumnModel colModel = (DefaultTableColumnModel) footer.getColumnModel();
TableColumn col = colModel.getColumn(index);
col.setHeaderValue(value);
}
public Object getFooterValue(int index) {
DefaultTableColumnModel colModel = (DefaultTableColumnModel) footer.getColumnModel();
TableColumn col = colModel.getColumn(index);
return col.getHeaderValue();
}
public JTable getTable() {
return table;
}
public Dimension getPreferredSize() {
int height = 0, width = 0;
if (table != null) {
height = header.getPreferredSize().height + table.getPreferredSize().height;
height += footer.getPreferredSize().height;
width = Math.max(table.getTableHeader().getPreferredSize().width, table.getPreferredSize().width);
return new Dimension(width, height);
} else {
return new Dimension(0, 0);
}
}
public java.awt.Dimension getMaximumSize() {
Dimension maxDim = super.getMaximumSize();
Dimension prefDim = getPreferredSize();
Dimension dim = new Dimension();
dim.width = maxDim.width;
dim.height = prefDim.height;
return dim;
}
public java.awt.Dimension getMinimumSize() {
return getPreferredSize();
}
private class FooterAdjuster implements TableColumnModelListener
{
public void columnAdded(TableColumnModelEvent e) {
adjust();
}
public void columnRemoved(TableColumnModelEvent e) {
adjust();
}
public void columnMoved(TableColumnModelEvent e) {
adjust();
}
public void columnMarginChanged(ChangeEvent e) {
adjust();
}
public void columnSelectionChanged(ListSelectionEvent e) {
}
private void adjust() {
for (int i = 0; i < footerSpan.length; i++) {
int width = 0;
for (int j = 0; j < footerSpan[i].length; j++) {
TableColumn tableCol = table.getColumnModel().getColumn(footerSpan[i][j]);
width += tableCol.getWidth();
}
TableColumn footerCol = footer.getColumnModel().getColumn(i);
footerCol.setWidth(width);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment