Last active
August 29, 2015 14:05
-
-
Save behrangsa/59cfca1ad5ff708b284f to your computer and use it in GitHub Desktop.
TablePanel (retrieved via web.archive.org)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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