Results 1 to 3 of 3
  1. #1
    new2java2009 is offline Member
    Join Date
    Aug 2009
    Posts
    60
    Rep Power
    0

    Default 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);
          }
        }
      }
    }

  2. #2
    Fubarable's Avatar
    Fubarable is offline Moderator
    Join Date
    Jun 2008
    Posts
    19,316
    Blog Entries
    1
    Rep Power
    25

    Default

    Does any one know how to modify the following code ...
    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.
    Last edited by Fubarable; 07-13-2011 at 11:32 PM.

  3. #3
    new2java2009 is offline Member
    Join Date
    Aug 2009
    Posts
    60
    Rep Power
    0

    Default

    I am just trying my luck to see if anybody have done this before that might be able to help.
    Any suggestion helps.
    I have spent days on it myself already and going nowhere.

Similar Threads

  1. Groupable table header - not able to sort
    By new2java2009 in forum New To Java
    Replies: 2
    Last Post: 07-08-2011, 09:49 PM
  2. 2D Array - Sum of columns
    By dutchgold92 in forum New To Java
    Replies: 2
    Last Post: 02-28-2011, 07:18 PM
  3. raw text to columns...
    By ashishgaj in forum New To Java
    Replies: 1
    Last Post: 02-02-2011, 06:29 PM
  4. Jlist Columns
    By DenRed in forum New To Java
    Replies: 2
    Last Post: 10-02-2009, 09:33 AM
  5. Using Columns With JTextField
    By The Evil Genius in forum AWT / Swing
    Replies: 1
    Last Post: 03-17-2008, 01:01 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •