Results 1 to 3 of 3
Thread: Groupable columns
- 07-13-2011, 11:11 PM #1
Member
- Join Date
- Aug 2009
- Posts
- 60
- Rep Power
- 0
Groupable columns
Does any one know how to modify the following code so that the columns behaves like jxtables when clicking on the column headers - it sorts the column acending/decending.
Thanks!!
Following code are from link:
Groupable(Group) Header Example : Grid Table*«*Swing Components*«*Java
Java Code:/* (swing1.1beta3) *example from http://www.crionics.com/products/opensource/faq/swing_ex/SwingExamples.html * */ /* (swing1.1beta3) * * |-----------------------------------------------------| * | | Name | Language | * | |-----------------|--------------------------| * | SNo. | | | | Others | * | | 1 | 2 | Native |-----------------| * | | | | | 2 | 3 | * |-----------------------------------------------------| * | | | | | | | * */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; /** * @version 1.0 11/09/98 */ public class GroupableHeaderExample extends JFrame { GroupableHeaderExample() { super( "Groupable Header Example" ); DefaultTableModel dm = new DefaultTableModel(); dm.setDataVector(new Object[][]{ {"119","foo","bar","ja","ko","zh"}, {"911","bar","foo","en","fr","pt"}}, new Object[]{"SNo.","1","2","Native","2","3"}); JTable table = new JTable( dm ) { protected JTableHeader createDefaultTableHeader() { return new GroupableTableHeader(columnModel); } }; TableColumnModel cm = table.getColumnModel(); ColumnGroup g_name = new ColumnGroup("Name"); g_name.add(cm.getColumn(1)); g_name.add(cm.getColumn(2)); ColumnGroup g_lang = new ColumnGroup("Language"); g_lang.add(cm.getColumn(3)); ColumnGroup g_other = new ColumnGroup("Others"); g_other.add(cm.getColumn(4)); g_other.add(cm.getColumn(5)); g_lang.add(g_other); GroupableTableHeader header = (GroupableTableHeader)table.getTableHeader(); header.addColumnGroup(g_name); header.addColumnGroup(g_lang); JScrollPane scroll = new JScrollPane( table ); getContentPane().add( scroll ); setSize( 400, 120 ); } public static void main(String[] args) { GroupableHeaderExample frame = new GroupableHeaderExample(); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit(0); } }); frame.setVisible(true); } } /* * (swing1.1beta3) * */ import java.util.*; import java.awt.*; import javax.swing.*; import javax.swing.table.*; /** * GroupableTableHeader * * @version 1.0 10/20/98 * @author Nobuo Tamemasa */ public class GroupableTableHeader extends JTableHeader { private static final String uiClassID = "GroupableTableHeaderUI"; protected Vector columnGroups = null; public GroupableTableHeader(TableColumnModel model) { super(model); setUI(new GroupableTableHeaderUI()); setReorderingAllowed(false); } public void updateUI(){ setUI(new GroupableTableHeaderUI()); } public void setReorderingAllowed(boolean b) { reorderingAllowed = false; } public void addColumnGroup(ColumnGroup g) { if (columnGroups == null) { columnGroups = new Vector(); } columnGroups.addElement(g); } public Enumeration getColumnGroups(TableColumn col) { if (columnGroups == null) return null; Enumeration e = columnGroups.elements(); while (e.hasMoreElements()) { ColumnGroup cGroup = (ColumnGroup)e.nextElement(); Vector v_ret = (Vector)cGroup.getColumnGroups(col,new Vector()); if (v_ret != null) { return v_ret.elements(); } } return null; } public void setColumnMargin() { if (columnGroups == null) return; int columnMargin = getColumnModel().getColumnMargin(); Enumeration e = columnGroups.elements(); while (e.hasMoreElements()) { ColumnGroup cGroup = (ColumnGroup)e.nextElement(); cGroup.setColumnMargin(columnMargin); } } } /* * (swing1.1beta3) * */ import java.util.*; import java.awt.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.table.*; import javax.swing.plaf.basic.*; public class GroupableTableHeaderUI extends BasicTableHeaderUI { public void paint(Graphics g, JComponent c) { Rectangle clipBounds = g.getClipBounds(); if (header.getColumnModel() == null) return; ((GroupableTableHeader)header).setColumnMargin(); int column = 0; Dimension size = header.getSize(); Rectangle cellRect = new Rectangle(0, 0, size.width, size.height); Hashtable h = new Hashtable(); int columnMargin = header.getColumnModel().getColumnMargin(); Enumeration enumeration = header.getColumnModel().getColumns(); while (enumeration.hasMoreElements()) { cellRect.height = size.height; cellRect.y = 0; TableColumn aColumn = (TableColumn)enumeration.nextElement(); Enumeration cGroups = ((GroupableTableHeader)header).getColumnGroups(aColumn); if (cGroups != null) { int groupHeight = 0; while (cGroups.hasMoreElements()) { ColumnGroup cGroup = (ColumnGroup)cGroups.nextElement(); Rectangle groupRect = (Rectangle)h.get(cGroup); if (groupRect == null) { groupRect = new Rectangle(cellRect); Dimension d = cGroup.getSize(header.getTable()); groupRect.width = d.width; groupRect.height = d.height; h.put(cGroup, groupRect); } paintCell(g, groupRect, cGroup); groupHeight += groupRect.height; cellRect.height = size.height - groupHeight; cellRect.y = groupHeight; } } cellRect.width = aColumn.getWidth() + columnMargin; if (cellRect.intersects(clipBounds)) { paintCell(g, cellRect, column); } cellRect.x += cellRect.width; column++; } } private void paintCell(Graphics g, Rectangle cellRect, int columnIndex) { TableColumn aColumn = header.getColumnModel().getColumn(columnIndex); TableCellRenderer renderer = aColumn.getHeaderRenderer(); //revised by Java2s.com renderer = new DefaultTableCellRenderer(){ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel header = new JLabel(); header.setForeground(table.getTableHeader().getForeground()); header.setBackground(table.getTableHeader().getBackground()); header.setFont(table.getTableHeader().getFont()); header.setHorizontalAlignment(JLabel.CENTER); header.setText(value.toString()); header.setBorder(UIManager.getBorder("TableHeader.cellBorder")); return header; } }; Component c = renderer.getTableCellRendererComponent( header.getTable(), aColumn.getHeaderValue(),false, false, -1, columnIndex); c.setBackground(UIManager.getColor("control")); rendererPane.add(c); rendererPane.paintComponent(g, c, header, cellRect.x, cellRect.y, cellRect.width, cellRect.height, true); } private void paintCell(Graphics g, Rectangle cellRect,ColumnGroup cGroup) { TableCellRenderer renderer = cGroup.getHeaderRenderer(); //revised by Java2s.com // if(renderer == null){ // return ; // } Component component = renderer.getTableCellRendererComponent( header.getTable(), cGroup.getHeaderValue(),false, false, -1, -1); rendererPane.add(component); rendererPane.paintComponent(g, component, header, cellRect.x, cellRect.y, cellRect.width, cellRect.height, true); } private int getHeaderHeight() { int height = 0; TableColumnModel columnModel = header.getColumnModel(); for(int column = 0; column < columnModel.getColumnCount(); column++) { TableColumn aColumn = columnModel.getColumn(column); TableCellRenderer renderer = aColumn.getHeaderRenderer(); //revised by Java2s.com if(renderer == null){ return 60; } Component comp = renderer.getTableCellRendererComponent( header.getTable(), aColumn.getHeaderValue(), false, false,-1, column); int cHeight = comp.getPreferredSize().height; Enumeration e = ((GroupableTableHeader)header).getColumnGroups(aColumn); if (e != null) { while (e.hasMoreElements()) { ColumnGroup cGroup = (ColumnGroup)e.nextElement(); cHeight += cGroup.getSize(header.getTable()).height; } } height = Math.max(height, cHeight); } return height; } private Dimension createHeaderSize(long width) { TableColumnModel columnModel = header.getColumnModel(); width += columnModel.getColumnMargin() * columnModel.getColumnCount(); if (width > Integer.MAX_VALUE) { width = Integer.MAX_VALUE; } return new Dimension((int)width, getHeaderHeight()); } public Dimension getPreferredSize(JComponent c) { long width = 0; Enumeration enumeration = header.getColumnModel().getColumns(); while (enumeration.hasMoreElements()) { TableColumn aColumn = (TableColumn)enumeration.nextElement(); width = width + aColumn.getPreferredWidth(); } return createHeaderSize(width); } } /* * (swing1.1beta3) * */ import java.util.*; import java.awt.*; import javax.swing.*; import javax.swing.table.*; /** * ColumnGroup * * @version 1.0 10/20/98 * @author Nobuo Tamemasa */ class ColumnGroup { protected TableCellRenderer renderer; protected Vector v; protected String text; protected int margin=0; public ColumnGroup(String text) { this(null,text); } public ColumnGroup(TableCellRenderer renderer,String text) { if (renderer == null) { this.renderer = new DefaultTableCellRenderer() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JTableHeader header = table.getTableHeader(); if (header != null) { setForeground(header.getForeground()); setBackground(header.getBackground()); setFont(header.getFont()); } setHorizontalAlignment(JLabel.CENTER); setText((value == null) ? "" : value.toString()); setBorder(UIManager.getBorder("TableHeader.cellBorder")); return this; } }; } else { this.renderer = renderer; } this.text = text; v = new Vector(); } /** * @param obj TableColumn or ColumnGroup */ public void add(Object obj) { if (obj == null) { return; } v.addElement(obj); } /** * @param c TableColumn * @param v ColumnGroups */ public Vector getColumnGroups(TableColumn c, Vector g) { g.addElement(this); if (v.contains(c)) return g; Enumeration e = v.elements(); while (e.hasMoreElements()) { Object obj = e.nextElement(); if (obj instanceof ColumnGroup) { Vector groups = (Vector)((ColumnGroup)obj).getColumnGroups(c,(Vector)g.clone()); if (groups != null) return groups; } } return null; } public TableCellRenderer getHeaderRenderer() { return renderer; } public void setHeaderRenderer(TableCellRenderer renderer) { if (renderer != null) { this.renderer = renderer; } } public Object getHeaderValue() { return text; } public Dimension getSize(JTable table) { Component comp = renderer.getTableCellRendererComponent( table, getHeaderValue(), false, false,-1, -1); int height = comp.getPreferredSize().height; int width = 0; Enumeration e = v.elements(); while (e.hasMoreElements()) { Object obj = e.nextElement(); if (obj instanceof TableColumn) { TableColumn aColumn = (TableColumn)obj; width += aColumn.getWidth(); width += margin; } else { width += ((ColumnGroup)obj).getSize(table).width; } } return new Dimension(width, height); } public void setColumnMargin(int margin) { this.margin = margin; Enumeration e = v.elements(); while (e.hasMoreElements()) { Object obj = e.nextElement(); if (obj instanceof ColumnGroup) { ((ColumnGroup)obj).setColumnMargin(margin); } } } }
-
Are you serious? That's a heck of a lot of code to go through, and I doubt that anyone is going to be able to have the time to be able to do all this work. This really is for you to do yourself, and then if stuck come back with a specific answerable question and your own code.Does any one know how to modify the following code ...Last edited by Fubarable; 07-13-2011 at 11:32 PM.
- 07-13-2011, 11:51 PM #3
Member
- Join Date
- Aug 2009
- Posts
- 60
- Rep Power
- 0
Similar Threads
-
Groupable table header - not able to sort
By new2java2009 in forum New To JavaReplies: 2Last Post: 07-08-2011, 09:49 PM -
2D Array - Sum of columns
By dutchgold92 in forum New To JavaReplies: 2Last Post: 02-28-2011, 07:18 PM -
raw text to columns...
By ashishgaj in forum New To JavaReplies: 1Last Post: 02-02-2011, 06:29 PM -
Jlist Columns
By DenRed in forum New To JavaReplies: 2Last Post: 10-02-2009, 09:33 AM -
Using Columns With JTextField
By The Evil Genius in forum AWT / SwingReplies: 1Last Post: 03-17-2008, 01:01 AM


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks