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

Repaint problem of JTable and JScrollPane with Swing 1.1 Beta 3

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: P4 P4
    • None
    • 1.2.0
    • client-libs



      Name: rk38400 Date: 11/10/98


      JTable displayed in a JScrollPane has painting problems in the following situation.

      On line's 80 through 86 of the code below the Table's AUTO_RESIZING_MODE is set to AUTO_RESIZE_OFF.
      This causes the horizontal scrollbar to come up when the scrollpane is resized to a smaller
      value than the viewport size. For more explanation look at the documentation.
      The following six lines of the code set the width of the columns of the table to the width
      of the individual column header values.

      When the example program is run the scroll pane comes up with a horizontal scroll bar and a
      vertical scrollbar. When the horizontal scrollbar is scrolled to the right end, you can see
       an empty column without a header. There is only one way to eliminate this. If any one of the
      column header is resized, the lines disappear.

      Would like to know if there is any workaround for this.


      Thanks

      Siva

      /********** Cut here for the Code ***************/
      import javax.swing.*;
      import javax.swing.table.*;

      import java.awt.event.WindowAdapter;
      import java.awt.event.WindowEvent;
      import java.awt.Dimension;

      public class TableExample3 {

          public TableExample3() {
              JFrame frame = new JFrame("Table");
              frame.addWindowListener(new WindowAdapter() {
                  public void windowClosing(WindowEvent e) {System.exit(0);}});

              // Take the dummy data from SwingSet.
              final String[] names = {"First Name", "Last Name", "Favorite Color",
                                      "Favorite Number", "Vegetarian"};
              final Object[][] data = {
      {"Mark", "Andrews", "Red", new Integer(2), new Boolean(true)},
      {"Tom", "Ball", "Blue", new Integer(99), new Boolean(false)},
      {"Alan", "Chung", "Green", new Integer(838), new Boolean(false)},
      {"Jeff", "Dinkins", "Turquois", new Integer(8), new Boolean(true)},
      {"Amy", "Fowler", "Yellow", new Integer(3), new Boolean(false)},
      {"Brian", "Gerhold", "Green", new Integer(0), new Boolean(false)},
      {"James", "Gosling", "Pink", new Integer(21), new Boolean(false)},
      {"David", "Karlton", "Red", new Integer(1), new Boolean(false)},
      {"Dave", "Kloba", "Yellow", new Integer(14), new Boolean(false)},
      {"Peter", "Korn", "Purple", new Integer(12), new Boolean(false)},
      {"Phil", "Milne", "Purple", new Integer(3), new Boolean(false)},
      {"Dave", "Moore", "Green", new Integer(88), new Boolean(false)},
      {"Hans", "Muller", "Maroon", new Integer(5), new Boolean(false)},
      {"Rick", "Levenson", "Blue", new Integer(2), new Boolean(false)},
      {"Tim", "Prinzing", "Blue", new Integer(22), new Boolean(false)},
      {"Chester", "Rose", "Black", new Integer(0), new Boolean(false)},
      {"Ray", "Ryan", "Gray", new Integer(77), new Boolean(false)},
      {"Georges", "Saab", "Red", new Integer(4), new Boolean(false)},
      {"Willie", "Walker", "Phthalo Blue", new Integer(4), new Boolean(false)},
      {"Kathy", "Walrath", "Blue", new Integer(8), new Boolean(false)},
      {"Arnaud", "Weber", "Green", new Integer(44), new Boolean(false)}
              };

              // Create a model of the data.
              TableModel dataModel = new AbstractTableModel() {
                  // These methods always need to be implemented.
                  public int getColumnCount() { return names.length; }
                  public int getRowCount() { return data.length;}
                  public Object getValueAt(int row, int col) {return data[row][col];}

                  // The default implementations of these methods in
                  // AbstractTableModel would work, but we can refine them.
                  public String getColumnName(int column) {return names[column];}
                  public Class getColumnClass(int col) {return getValueAt(0,col).getClass();}
                  public boolean isCellEditable(int row, int col) {return (col==4);}
                  public void setValueAt(Object aValue, int row, int column) {
                      data[row][column] = aValue;
                  }
               };

              JTable tableView = new JTable(dataModel);
              tableView.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
              for (int i = 0; i < tableView.getColumnCount(); i++)
              {
                 TableColumn column = tableView.getTableHeader().getColumnModel().getColumn(i);
                 column.setMaxWidth(0);
                 column.sizeWidthToFit();
              }


              JScrollPane scrollpane = new JScrollPane(tableView);

              scrollpane.setPreferredSize(new Dimension(300, 300));
              frame.getContentPane().add(scrollpane);
              frame.pack();
              frame.setVisible(true);
          }

          public static void main(String[] args) {
              new TableExample3();
          }
      }
      (Review ID: 42374)
      ======================================================================

            pmilnesunw Philip Milne (Inactive)
            rkarsunw Ralph Kar (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: