Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4262262

DefaultTableModel.addColumn( ident ) resizes previous columns to initial size

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • None
    • 1.2.1
    • client-libs



      Name: mc57594 Date: 08/12/99


      =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
      I run under NT4/SP4, JDK1.2.1.

      I create a JTable, the I add columns. When I add a column, I
      initialize its identifier and Size (and min/max/pref. size).
      The pb is that when I add the third column (for instance), using
      "table.getModel().addColumn(name)" - model is DefaultTableModel -,
      that re-initialize the different size of all the previous columns
      to their initial size (75).
      If I do directly "table.addColumn(new TableColumn(int));", the pb
      does not appear.

      The following code show that, at display, all the columns have
      a size of 75, except the last one.

      ******************** code **************
      import java.awt.*;
      import javax.swing.*;

      public class JDialog3 extends javax.swing.JDialog
      {
      public JDialog3(Frame parent)
      {
      getContentPane().setLayout(null);
      setSize(405,205);
      setVisible(false);
      JScrollPane1.setOpaque(true);
      getContentPane().add(JScrollPane1);
      JScrollPane1.setBounds(13,11,360,160);
      JScrollPane1.getViewport().add(JTable1);
      JTable1.setBounds(0,0,357,0);

          JTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // <<<<<<<<<<<
          JTable1.setShowVerticalLines(true);
          JTable1.setShowHorizontalLines(false);
          
          String[] headerStr = {"Col1","Col2","Col3","Col4"};
          int[] columnWidth = {12,200,100,36};
          
          JTable1.setModel( new javax.swing.table.DefaultTableModel() {
            public Class getColumnClass(int col) {
              switch (col) {
                case 0: return String.class;
                case 1: return String.class;
                case 2: return Integer.class;
                case 3: return Boolean.class;
                default: return Object.class;
              }
            }
              
              public boolean isCellEditable(int row, int col) {
                return false;
              }
              
            }
          );
          
          // create column each after the other : name + *** width **
          for (int i = 0; i<4;i++)
          {
            createCol( headerStr[i], columnWidth[i]);
          }
          
      SymWindow aSymWindow = new SymWindow();
      this.addWindowListener(aSymWindow);
      }

      public void createCol( String hdr, int wid) {
          int idx = JTable1.getColumnCount();

          // COMMENT FOLLOWING for OK
          // add column : BUG
          ((javax.swing.table.DefaultTableModel)(JTable1.getModel())).addColumn( hdr );
          // UNCOMMENT FOLLOWING for OK
          // add column : OK
          //JTable1.addColumn( new javax.swing.table.TableColumn(idx) );
          
          javax.swing.table.TableColumn col = JTable1.getColumnModel().getColumn(idx);
          
          // UNCOMMENT FOLLOWING for OK, and same feature
          //col.setIdentifier(hdr);

      // all the stuff because of bug #4189262
          col.setMinWidth( wid );
          col.setMaxWidth( wid );
          col.setPreferredWidth( wid ); // really usefull
          col.setMinWidth(12);
          col.setMaxWidth(1000);
      }

      public JDialog3()
      {
      this((Frame)null);
      }

      public JDialog3(String sTitle)
      {
      this();
      setTitle(sTitle);
      }

      static public void main(String args[])
      {
      (new JDialog3()).setVisible(true);
      }

      javax.swing.JScrollPane JScrollPane1 = new javax.swing.JScrollPane();
      javax.swing.JTable JTable1 = new javax.swing.JTable();


      class SymWindow extends java.awt.event.WindowAdapter
      {
      public void windowClosing(java.awt.event.WindowEvent event)
      {
      Object object = event.getSource();
      if (object == JDialog3.this)
      JDialog3_windowClosing(event);
      }
      }

      void JDialog3_windowClosing(java.awt.event.WindowEvent event)
      {
      setVisible(false);
      System.exit(0);
      }
      }
      ***************** end of code *******************

      I may miss something, but I guess it must be a bug. I could'nt
      find something like this in the existing bugs.

      Keep enjoy Java!

      Francois.
      (Review ID: 93588)
      ======================================================================

            pmilnesunw Philip Milne (Inactive)
            mchamnessunw Mark Chamness (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: