home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / JTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  25.3 KB  |  1,225 lines

  1. package com.sun.java.swing;
  2.  
  3. import com.sun.java.accessibility.Accessible;
  4. import com.sun.java.accessibility.AccessibleContext;
  5. import com.sun.java.swing.border.LineBorder;
  6. import com.sun.java.swing.event.CellEditorListener;
  7. import com.sun.java.swing.event.ChangeEvent;
  8. import com.sun.java.swing.event.ListSelectionEvent;
  9. import com.sun.java.swing.event.ListSelectionListener;
  10. import com.sun.java.swing.event.TableColumnModelEvent;
  11. import com.sun.java.swing.event.TableColumnModelListener;
  12. import com.sun.java.swing.event.TableModelEvent;
  13. import com.sun.java.swing.event.TableModelListener;
  14. import com.sun.java.swing.plaf.TableUI;
  15. import com.sun.java.swing.table.DefaultTableCellRenderer;
  16. import com.sun.java.swing.table.DefaultTableColumnModel;
  17. import com.sun.java.swing.table.DefaultTableModel;
  18. import com.sun.java.swing.table.JTableHeader;
  19. import com.sun.java.swing.table.TableCellEditor;
  20. import com.sun.java.swing.table.TableCellRenderer;
  21. import com.sun.java.swing.table.TableColumn;
  22. import com.sun.java.swing.table.TableColumnModel;
  23. import com.sun.java.swing.table.TableModel;
  24. import java.awt.AWTEvent;
  25. import java.awt.Color;
  26. import java.awt.Component;
  27. import java.awt.Container;
  28. import java.awt.Dimension;
  29. import java.awt.LayoutManager;
  30. import java.awt.Point;
  31. import java.awt.Rectangle;
  32. import java.awt.event.InputEvent;
  33. import java.awt.event.MouseEvent;
  34. import java.io.IOException;
  35. import java.io.ObjectInputStream;
  36. import java.io.ObjectOutputStream;
  37. import java.util.Enumeration;
  38. import java.util.EventObject;
  39. import java.util.Hashtable;
  40. import java.util.Vector;
  41.  
  42. public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible {
  43.    public static final int AUTO_RESIZE_OFF = 0;
  44.    public static final int AUTO_RESIZE_LAST_COLUMN = 1;
  45.    public static final int AUTO_RESIZE_ALL_COLUMNS = 2;
  46.    protected TableModel dataModel;
  47.    protected TableColumnModel columnModel;
  48.    protected ListSelectionModel selectionModel;
  49.    protected JTableHeader tableHeader;
  50.    protected int rowHeight;
  51.    protected int rowMargin;
  52.    protected Color gridColor;
  53.    protected boolean showHorizontalLines;
  54.    protected boolean showVerticalLines;
  55.    protected int autoResizeMode;
  56.    protected boolean autoCreateColumnsFromModel;
  57.    protected Dimension preferredViewportSize;
  58.    protected boolean rowSelectionAllowed;
  59.    protected boolean cellSelectionEnabled;
  60.    protected transient Component editorComp;
  61.    protected transient TableCellEditor cellEditor;
  62.    protected transient int editingColumn;
  63.    protected transient int editingRow;
  64.    protected transient Hashtable defaultRenderersByColumnClass;
  65.    protected transient Hashtable defaultEditorsByColumnClass;
  66.    protected Color selectionForeground;
  67.    protected Color selectionBackground;
  68.    // $FF: synthetic field
  69.    static Class class$java$lang$Object;
  70.    // $FF: synthetic field
  71.    static Class class$java$lang$Number;
  72.    // $FF: synthetic field
  73.    static Class class$com$sun$java$swing$ImageIcon;
  74.    // $FF: synthetic field
  75.    static Class class$java$lang$Boolean;
  76.  
  77.    public JTable() {
  78.       this((TableModel)null, (TableColumnModel)null, (ListSelectionModel)null);
  79.    }
  80.  
  81.    public JTable(TableModel var1) {
  82.       this(var1, (TableColumnModel)null, (ListSelectionModel)null);
  83.    }
  84.  
  85.    public JTable(TableModel var1, TableColumnModel var2) {
  86.       this(var1, var2, (ListSelectionModel)null);
  87.    }
  88.  
  89.    public JTable(TableModel var1, TableColumnModel var2, ListSelectionModel var3) {
  90.       ((Container)this).setLayout((LayoutManager)null);
  91.       if (var1 == null) {
  92.          var1 = this.createDefaultDataModel();
  93.       }
  94.  
  95.       this.setModel(var1);
  96.       if (var2 == null) {
  97.          var2 = this.createDefaultColumnModel();
  98.       }
  99.  
  100.       this.setColumnModel(var2);
  101.       if (var3 == null) {
  102.          var3 = this.createDefaultSelectionModel();
  103.       }
  104.  
  105.       this.setSelectionModel(var3);
  106.       this.initializeLocalVars();
  107.       this.updateUI();
  108.    }
  109.  
  110.    public JTable(int var1, int var2) {
  111.       this(new DefaultTableModel(var1, var2));
  112.    }
  113.  
  114.    public JTable(Vector var1, Vector var2) {
  115.       this(new DefaultTableModel(var1, var2));
  116.    }
  117.  
  118.    public JTable(Object[][] var1, Object[] var2) {
  119.       this(new DefaultTableModel(var1, var2));
  120.    }
  121.  
  122.    public static JScrollPane createScrollPaneForTable(JTable var0) {
  123.       if (var0 == null) {
  124.          var0 = new JTable();
  125.       }
  126.  
  127.       JScrollPane var1 = new JScrollPane(var0);
  128.       var1.setColumnHeaderView(var0.getTableHeader());
  129.       var1.getViewport().setBackingStoreEnabled(true);
  130.       ((JComponent)var1).setBorder(UIManager.getBorder("Table.scrollPaneBorder"));
  131.       return var1;
  132.    }
  133.  
  134.    public void setTableHeader(JTableHeader var1) {
  135.       if (this.tableHeader != var1) {
  136.          if (this.tableHeader != null) {
  137.             this.tableHeader.setTable((JTable)null);
  138.          }
  139.  
  140.          this.tableHeader = var1;
  141.          if (this.tableHeader != null) {
  142.             this.tableHeader.setTable(this);
  143.          }
  144.       }
  145.  
  146.    }
  147.  
  148.    public JTableHeader getTableHeader() {
  149.       return this.tableHeader;
  150.    }
  151.  
  152.    public void setRowHeight(int var1) {
  153.       if (var1 <= 0) {
  154.          throw new IllegalArgumentException("New row height less than 1");
  155.       } else {
  156.          this.rowHeight = var1;
  157.          this.resizeAndRepaint();
  158.       }
  159.    }
  160.  
  161.    public int getRowHeight() {
  162.       return this.rowHeight;
  163.    }
  164.  
  165.    public void setIntercellSpacing(Dimension var1) {
  166.       this.rowMargin = var1.height;
  167.       this.getColumnModel().setColumnMargin(var1.width);
  168.       this.resizeAndRepaint();
  169.    }
  170.  
  171.    public Dimension getIntercellSpacing() {
  172.       return new Dimension(this.getColumnModel().getColumnMargin(), this.rowMargin);
  173.    }
  174.  
  175.    public void setGridColor(Color var1) {
  176.       if (var1 == null) {
  177.          throw new IllegalArgumentException("New color is null");
  178.       } else {
  179.          this.gridColor = var1;
  180.          ((Component)this).repaint();
  181.       }
  182.    }
  183.  
  184.    public Color getGridColor() {
  185.       return this.gridColor;
  186.    }
  187.  
  188.    public void setShowGrid(boolean var1) {
  189.       this.setShowHorizontalLines(var1);
  190.       this.setShowVerticalLines(var1);
  191.       ((Component)this).repaint();
  192.    }
  193.  
  194.    public void setShowHorizontalLines(boolean var1) {
  195.       this.showHorizontalLines = var1;
  196.       ((Component)this).repaint();
  197.    }
  198.  
  199.    public void setShowVerticalLines(boolean var1) {
  200.       this.showVerticalLines = var1;
  201.       ((Component)this).repaint();
  202.    }
  203.  
  204.    public boolean getShowHorizontalLines() {
  205.       return this.showHorizontalLines;
  206.    }
  207.  
  208.    public boolean getShowVerticalLines() {
  209.       return this.showVerticalLines;
  210.    }
  211.  
  212.    public void setAutoResizeMode(int var1) {
  213.       if (var1 == 2 || var1 == 1 || var1 == 0) {
  214.          this.autoResizeMode = var1;
  215.          this.resizeAndRepaint();
  216.          this.tableHeader.resizeAndRepaint();
  217.       }
  218.  
  219.    }
  220.  
  221.    public int getAutoResizeMode() {
  222.       return this.autoResizeMode;
  223.    }
  224.  
  225.    public void setAutoCreateColumnsFromModel(boolean var1) {
  226.       if (this.autoCreateColumnsFromModel != var1) {
  227.          this.autoCreateColumnsFromModel = var1;
  228.          if (this.autoCreateColumnsFromModel) {
  229.             this.createDefaultColumnsFromModel();
  230.          }
  231.       }
  232.  
  233.    }
  234.  
  235.    public boolean getAutoCreateColumnsFromModel() {
  236.       return this.autoCreateColumnsFromModel;
  237.    }
  238.  
  239.    public void createDefaultColumnsFromModel() {
  240.       TableModel var1 = this.getModel();
  241.       if (var1 != null) {
  242.          TableColumnModel var2 = this.getColumnModel();
  243.          var2.removeColumnModelListener(this);
  244.  
  245.          while(var2.getColumnCount() > 0) {
  246.             var2.removeColumn(var2.getColumn(0));
  247.          }
  248.  
  249.          for(int var3 = 0; var3 < var1.getColumnCount(); ++var3) {
  250.             TableColumn var4 = new TableColumn(var3);
  251.             this.addColumn(var4);
  252.          }
  253.  
  254.          var2.addColumnModelListener(this);
  255.       }
  256.  
  257.    }
  258.  
  259.    public void setDefaultRenderer(Class var1, TableCellRenderer var2) {
  260.       this.defaultRenderersByColumnClass.put(var1, var2);
  261.    }
  262.  
  263.    public TableCellRenderer getDefaultRenderer(Class var1) {
  264.       if (var1 == null) {
  265.          return null;
  266.       } else {
  267.          Object var2 = this.defaultRenderersByColumnClass.get(var1);
  268.          return var2 != null ? (TableCellRenderer)var2 : this.getDefaultRenderer(var1.getSuperclass());
  269.       }
  270.    }
  271.  
  272.    public void setDefaultEditor(Class var1, TableCellEditor var2) {
  273.       this.defaultEditorsByColumnClass.put(var1, var2);
  274.    }
  275.  
  276.    public TableCellEditor getDefaultEditor(Class var1) {
  277.       if (var1 == null) {
  278.          return null;
  279.       } else {
  280.          Object var2 = this.defaultEditorsByColumnClass.get(var1);
  281.          return var2 != null ? (TableCellEditor)var2 : this.getDefaultEditor(var1.getSuperclass());
  282.       }
  283.    }
  284.  
  285.    public void setSelectionMode(int var1) {
  286.       this.clearSelection();
  287.       this.getSelectionModel().setSelectionMode(var1);
  288.       this.getColumnModel().getSelectionModel().setSelectionMode(var1);
  289.    }
  290.  
  291.    public void setRowSelectionAllowed(boolean var1) {
  292.       this.clearSelection();
  293.       this.rowSelectionAllowed = var1;
  294.    }
  295.  
  296.    public boolean getRowSelectionAllowed() {
  297.       return this.rowSelectionAllowed;
  298.    }
  299.  
  300.    public void setColumnSelectionAllowed(boolean var1) {
  301.       this.clearSelection();
  302.       this.columnModel.setColumnSelectionAllowed(var1);
  303.    }
  304.  
  305.    public boolean getColumnSelectionAllowed() {
  306.       return this.columnModel.getColumnSelectionAllowed();
  307.    }
  308.  
  309.    public void setCellSelectionEnabled(boolean var1) {
  310.       this.clearSelection();
  311.       this.cellSelectionEnabled = var1;
  312.    }
  313.  
  314.    public boolean getCellSelectionEnabled() {
  315.       return this.cellSelectionEnabled;
  316.    }
  317.  
  318.    public void selectAll() {
  319.       if (this.getSelectedRowCount() > 0) {
  320.          int var1 = this.getRowCount();
  321.          if (var1 > 0) {
  322.             this.setRowSelectionInterval(0, var1);
  323.          }
  324.       }
  325.  
  326.       if (this.getSelectedColumnCount() > 0) {
  327.          int var2 = this.getColumnCount();
  328.          if (var2 > 0) {
  329.             this.setColumnSelectionInterval(0, var2);
  330.          }
  331.       }
  332.  
  333.    }
  334.  
  335.    public void clearSelection() {
  336.       this.columnModel.getSelectionModel().clearSelection();
  337.       this.selectionModel.clearSelection();
  338.    }
  339.  
  340.    public void setRowSelectionInterval(int var1, int var2) {
  341.       this.selectionModel.setSelectionInterval(var1, var2);
  342.    }
  343.  
  344.    public void setColumnSelectionInterval(int var1, int var2) {
  345.       this.columnModel.getSelectionModel().setSelectionInterval(var1, var2);
  346.    }
  347.  
  348.    public void addRowSelectionInterval(int var1, int var2) {
  349.       this.selectionModel.addSelectionInterval(var1, var2);
  350.    }
  351.  
  352.    public void addColumnSelectionInterval(int var1, int var2) {
  353.       this.columnModel.getSelectionModel().addSelectionInterval(var1, var2);
  354.    }
  355.  
  356.    public void removeRowSelectionInterval(int var1, int var2) {
  357.       this.selectionModel.removeSelectionInterval(var1, var2);
  358.    }
  359.  
  360.    public void removeColumnSelectionInterval(int var1, int var2) {
  361.       this.columnModel.getSelectionModel().removeSelectionInterval(var1, var2);
  362.    }
  363.  
  364.    public int getSelectedRow() {
  365.       return this.selectionModel != null ? this.selectionModel.getAnchorSelectionIndex() : -1;
  366.    }
  367.  
  368.    public int getSelectedColumn() {
  369.       return this.columnModel.getSelectionModel().getAnchorSelectionIndex();
  370.    }
  371.  
  372.    public int[] getSelectedRows() {
  373.       if (this.selectionModel != null) {
  374.          int var1 = this.selectionModel.getMinSelectionIndex();
  375.          int var2 = this.selectionModel.getMaxSelectionIndex();
  376.          if (var1 != -1 && var2 != -1) {
  377.             int[] var3 = new int[1 + (var2 - var1)];
  378.             int var4 = 0;
  379.  
  380.             for(int var5 = var1; var5 <= var2; ++var5) {
  381.                if (this.selectionModel.isSelectedIndex(var5)) {
  382.                   var3[var4++] = var5;
  383.                }
  384.             }
  385.  
  386.             int[] var6 = new int[var4];
  387.             System.arraycopy(var3, 0, var6, 0, var4);
  388.             return var6;
  389.          } else {
  390.             return new int[0];
  391.          }
  392.       } else {
  393.          return new int[0];
  394.       }
  395.    }
  396.  
  397.    public int[] getSelectedColumns() {
  398.       return this.columnModel.getSelectedColumns();
  399.    }
  400.  
  401.    public int getSelectedRowCount() {
  402.       if (this.selectionModel != null) {
  403.          int var1 = this.selectionModel.getMinSelectionIndex();
  404.          int var2 = this.selectionModel.getMaxSelectionIndex();
  405.          int var3 = 0;
  406.  
  407.          for(int var4 = var1; var4 <= var2; ++var4) {
  408.             if (this.selectionModel.isSelectedIndex(var4)) {
  409.                ++var3;
  410.             }
  411.          }
  412.  
  413.          return var3;
  414.       } else {
  415.          return 0;
  416.       }
  417.    }
  418.  
  419.    public int getSelectedColumnCount() {
  420.       return this.columnModel.getSelectedColumnCount();
  421.    }
  422.  
  423.    public boolean isRowSelected(int var1) {
  424.       return this.selectionModel != null ? this.selectionModel.isSelectedIndex(var1) : false;
  425.    }
  426.  
  427.    public boolean isColumnSelected(int var1) {
  428.       return this.columnModel.getSelectionModel().isSelectedIndex(var1);
  429.    }
  430.  
  431.    public boolean isCellSelected(int var1, int var2) {
  432.       if (this.cellSelectionEnabled) {
  433.          return this.isRowSelected(var1) && this.isColumnSelected(var2);
  434.       } else {
  435.          return this.getRowSelectionAllowed() && this.isRowSelected(var1) || this.getColumnSelectionAllowed() && this.isColumnSelected(var2);
  436.       }
  437.    }
  438.  
  439.    public Color getSelectionForeground() {
  440.       return this.selectionForeground;
  441.    }
  442.  
  443.    public void setSelectionForeground(Color var1) {
  444.       Color var2 = this.selectionForeground;
  445.       this.selectionForeground = var1;
  446.       ((JComponent)this).firePropertyChange("selectionForeground", var2, var1);
  447.    }
  448.  
  449.    public Color getSelectionBackground() {
  450.       return this.selectionBackground;
  451.    }
  452.  
  453.    public void setSelectionBackground(Color var1) {
  454.       Color var2 = this.selectionBackground;
  455.       this.selectionBackground = var1;
  456.       ((JComponent)this).firePropertyChange("selectionBackground", var2, var1);
  457.    }
  458.  
  459.    public TableColumn getColumn(Object var1) {
  460.       TableColumnModel var2 = this.getColumnModel();
  461.       int var3 = var2.getColumnIndex(var1);
  462.       return var2.getColumn(var3);
  463.    }
  464.  
  465.    public int convertColumnIndexToModel(int var1) {
  466.       return var1 < 0 ? var1 : this.getColumnModel().getColumn(var1).getModelIndex();
  467.    }
  468.  
  469.    public int convertColumnIndexToView(int var1) {
  470.       if (var1 < 0) {
  471.          return var1;
  472.       } else {
  473.          TableColumnModel var2 = this.getColumnModel();
  474.  
  475.          for(int var3 = 0; var3 < this.getColumnCount(); ++var3) {
  476.             if (var2.getColumn(var3).getModelIndex() == var1) {
  477.                return var3;
  478.             }
  479.          }
  480.  
  481.          return -1;
  482.       }
  483.    }
  484.  
  485.    public int getRowCount() {
  486.       return this.getModel().getRowCount();
  487.    }
  488.  
  489.    public int getColumnCount() {
  490.       return this.getColumnModel().getColumnCount();
  491.    }
  492.  
  493.    public String getColumnName(int var1) {
  494.       return this.getModel().getColumnName(this.convertColumnIndexToModel(var1));
  495.    }
  496.  
  497.    public Class getColumnClass(int var1) {
  498.       return this.getModel().getColumnClass(this.convertColumnIndexToModel(var1));
  499.    }
  500.  
  501.    public Object getValueAt(int var1, int var2) {
  502.       return this.getModel().getValueAt(var1, this.convertColumnIndexToModel(var2));
  503.    }
  504.  
  505.    public void setValueAt(Object var1, int var2, int var3) {
  506.       this.getModel().setValueAt(var1, var2, this.convertColumnIndexToModel(var3));
  507.    }
  508.  
  509.    public boolean isCellEditable(int var1, int var2) {
  510.       return this.getModel().isCellEditable(var1, this.convertColumnIndexToModel(var2));
  511.    }
  512.  
  513.    public void addColumn(TableColumn var1) {
  514.       int var2 = var1.getModelIndex();
  515.       String var3 = this.getModel().getColumnName(var2);
  516.       if (var1.getHeaderValue() == null) {
  517.          var1.setHeaderValue(var3);
  518.       }
  519.  
  520.       this.getColumnModel().addColumn(var1);
  521.    }
  522.  
  523.    public void removeColumn(TableColumn var1) {
  524.       this.getColumnModel().removeColumn(var1);
  525.    }
  526.  
  527.    public void moveColumn(int var1, int var2) {
  528.       this.getColumnModel().moveColumn(var1, var2);
  529.    }
  530.  
  531.    public int columnAtPoint(Point var1) {
  532.       return this.getColumnModel().getColumnIndexAtX(var1.x);
  533.    }
  534.  
  535.    public int rowAtPoint(Point var1) {
  536.       int var2 = var1.y;
  537.       int var3 = this.getRowHeight();
  538.       int var4 = this.getIntercellSpacing().height;
  539.       int var5 = var3 + var4;
  540.       int var6 = var2 / var5;
  541.       if (var6 < 0) {
  542.          return -1;
  543.       } else {
  544.          return var6 >= this.getRowCount() ? -1 : var6;
  545.       }
  546.    }
  547.  
  548.    public Rectangle getCellRect(int var1, int var2, boolean var3) {
  549.       int var4 = 0;
  550.       int var6 = this.getColumnModel().getColumnMargin();
  551.       Enumeration var7 = this.getColumnModel().getColumns();
  552.       Rectangle var5 = new Rectangle();
  553.       var5.height = this.getRowHeight() + this.rowMargin;
  554.  
  555.       for(var5.y = var1 * var5.height; var7.hasMoreElements(); ++var4) {
  556.          TableColumn var8 = (TableColumn)var7.nextElement();
  557.          var5.width = var8.getWidth() + var6;
  558.          if (var4 == var2) {
  559.             break;
  560.          }
  561.  
  562.          var5.x += var5.width;
  563.       }
  564.  
  565.       if (!var3) {
  566.          Dimension var9 = this.getIntercellSpacing();
  567.          var5.setBounds(var5.x + var9.width / 2, var5.y + var9.height / 2, var5.width - var9.width, var5.height - var9.height);
  568.       }
  569.  
  570.       return var5;
  571.    }
  572.  
  573.    public void sizeColumnsToFit(boolean var1) {
  574.       int var2 = this.getColumnModel().getColumnMargin();
  575.       int var3 = ((JComponent)this).getWidth();
  576.       int var4 = 0;
  577.       int var6 = 0;
  578.       int[] var7 = new int[this.getColumnCount()];
  579.       int[] var8 = new int[this.getColumnCount()];
  580.       int[] var9 = new int[this.getColumnCount()];
  581.  
  582.       for(Enumeration var11 = this.getColumnModel().getColumns(); var11.hasMoreElements(); ++var6) {
  583.          TableColumn var5 = (TableColumn)var11.nextElement();
  584.          var7[var6] = var5.getWidth();
  585.          var8[var6] = var5.getMaxWidth();
  586.          var9[var6] = var5.getMinWidth();
  587.          var4 += var5.getWidth() + var2;
  588.       }
  589.  
  590.       int var12 = var3 - var4;
  591.       if (var12 < -1 || var12 > 1) {
  592.          if (var1) {
  593.             for(int var19 = this.getColumnCount() - 1; var19 >= 0; --var19) {
  594.                int var10;
  595.                if (var12 > 0) {
  596.                   var10 = var8[var19] - var7[var19];
  597.                } else {
  598.                   var10 = var9[var19] - var7[var19];
  599.                }
  600.  
  601.                if (Math.abs(var10) >= Math.abs(var12)) {
  602.                   var7[var19] += var12;
  603.                   break;
  604.                }
  605.  
  606.                var7[var19] += var10;
  607.                var12 -= var10;
  608.             }
  609.          } else {
  610.             float[] var13 = new float[this.getColumnCount()];
  611.             boolean var14 = true;
  612.  
  613.             for(int var20 = 0; var20 < this.getColumnCount(); ++var20) {
  614.                var13[var20] = (float)(var7[var20] + var2) / (float)var4;
  615.             }
  616.  
  617.             while(var12 != 0 && var14) {
  618.                int var15 = var12;
  619.                var14 = false;
  620.  
  621.                for(int var21 = 0; var21 < this.getColumnCount(); ++var21) {
  622.                   int var16 = (int)Math.ceil((double)((float)var12 * var13[var21]));
  623.                   if (var15 == 0) {
  624.                      break;
  625.                   }
  626.  
  627.                   if (Math.abs(var15) < Math.abs(var16)) {
  628.                      var16 = var15;
  629.                   }
  630.  
  631.                   int var25;
  632.                   if (var16 > 0) {
  633.                      var25 = var8[var21] - var7[var21];
  634.                   } else {
  635.                      if (var16 >= 0) {
  636.                         continue;
  637.                      }
  638.  
  639.                      var25 = var9[var21] - var7[var21];
  640.                   }
  641.  
  642.                   if (Math.abs(var25) >= Math.abs(var16)) {
  643.                      var14 = true;
  644.                      var7[var21] += var16;
  645.                      var15 -= var16;
  646.                   } else if (var25 != 0) {
  647.                      var7[var21] += var25;
  648.                      var15 -= var25;
  649.                      var13[var21] = 0.0F;
  650.                   }
  651.                }
  652.  
  653.                var12 = var15;
  654.                if (var15 != 0) {
  655.                   float var17 = 0.0F;
  656.  
  657.                   for(int var22 = 0; var22 < this.getColumnCount(); ++var22) {
  658.                      var17 += var13[var22];
  659.                   }
  660.  
  661.                   float var27 = 100.0F / var17;
  662.  
  663.                   for(int var23 = 0; var23 < this.getColumnCount(); ++var23) {
  664.                      var13[var23] *= var27;
  665.                   }
  666.                }
  667.             }
  668.          }
  669.  
  670.          var6 = 0;
  671.  
  672.          for(Enumeration var26 = this.getColumnModel().getColumns(); var26.hasMoreElements(); ++var6) {
  673.             TableColumn var18 = (TableColumn)var26.nextElement();
  674.             var18.setWidth(var7[var6]);
  675.          }
  676.  
  677.       }
  678.    }
  679.  
  680.    public String getToolTipText(MouseEvent var1) {
  681.       String var2 = null;
  682.       Point var3 = var1.getPoint();
  683.       int var4 = this.columnAtPoint(var3);
  684.       int var5 = this.rowAtPoint(var3);
  685.       if (var4 != -1 && var5 != -1) {
  686.          TableColumn var6 = this.getColumnModel().getColumn(var4);
  687.          TableCellRenderer var7 = var6.getCellRenderer();
  688.          if (var7 == null) {
  689.             Class var8 = this.getColumnClass(var4);
  690.             var7 = this.getDefaultRenderer(var8);
  691.          }
  692.  
  693.          Component var11 = var7.getTableCellRendererComponent(this, (Object)null, false, false, var5, var4);
  694.          if (var11 instanceof JComponent) {
  695.             Rectangle var10 = this.getCellRect(var5, var4, false);
  696.             var3.translate(-var10.x, -var10.y);
  697.             MouseEvent var9 = new MouseEvent(var11, ((AWTEvent)var1).getID(), ((InputEvent)var1).getWhen(), ((InputEvent)var1).getModifiers(), var3.x, var3.y, var1.getClickCount(), var1.isPopupTrigger());
  698.             var2 = ((JComponent)var11).getToolTipText(var9);
  699.          }
  700.       }
  701.  
  702.       if (var2 == null) {
  703.          var2 = ((JComponent)this).getToolTipText();
  704.       }
  705.  
  706.       return var2;
  707.    }
  708.  
  709.    public boolean editCellAt(int var1, int var2) {
  710.       return this.editCellAt(var1, var2, (EventObject)null);
  711.    }
  712.  
  713.    public boolean editCellAt(int var1, int var2, EventObject var3) {
  714.       if (!this.isCellEditable(var1, var2)) {
  715.          return false;
  716.       } else {
  717.          if (this.isEditing() && this.cellEditor != null) {
  718.             boolean var4 = this.cellEditor.stopCellEditing();
  719.             if (!var4) {
  720.                return false;
  721.             }
  722.          }
  723.  
  724.          TableColumn var6 = this.getColumnModel().getColumn(var2);
  725.          TableCellEditor var5 = var6.getCellEditor();
  726.          if (var5 == null) {
  727.             var5 = this.getDefaultEditor(this.getColumnClass(var2));
  728.          }
  729.  
  730.          if (var5 != null) {
  731.             this.editorComp = this.prepareEditor(var5, var1, var2);
  732.             if (var5.isCellEditable(var3)) {
  733.                this.editorComp.setBounds(this.getCellRect(var1, var2, false));
  734.                ((Container)this).add(this.editorComp);
  735.                this.editorComp.validate();
  736.                var5.shouldSelectCell(var3);
  737.                this.setCellEditor(var5);
  738.                this.setEditingRow(var1);
  739.                this.setEditingColumn(var2);
  740.                var5.addCellEditorListener(this);
  741.                ((Component)this).repaint();
  742.                return true;
  743.             }
  744.          }
  745.  
  746.          return false;
  747.       }
  748.    }
  749.  
  750.    public boolean isEditing() {
  751.       return this.cellEditor != null;
  752.    }
  753.  
  754.    public Component getEditorComponent() {
  755.       return this.editorComp;
  756.    }
  757.  
  758.    public int getEditingColumn() {
  759.       return this.editingColumn;
  760.    }
  761.  
  762.    public int getEditingRow() {
  763.       return this.editingRow;
  764.    }
  765.  
  766.    public TableUI getUI() {
  767.       return (TableUI)super.ui;
  768.    }
  769.  
  770.    public void setUI(TableUI var1) {
  771.       if (super.ui != var1) {
  772.          super.setUI(var1);
  773.          ((Component)this).repaint();
  774.       }
  775.  
  776.    }
  777.  
  778.    private void updateSubComponentUI(Object var1) {
  779.       if (var1 != null) {
  780.          Component var2 = null;
  781.          if (var1 instanceof Component) {
  782.             var2 = (Component)var1;
  783.          }
  784.  
  785.          if (var1 instanceof DefaultCellEditor) {
  786.             var2 = ((DefaultCellEditor)var1).getComponent();
  787.          }
  788.  
  789.          if (var2 != null && var2 instanceof JComponent) {
  790.             ((JComponent)var2).updateUI();
  791.          }
  792.  
  793.       }
  794.    }
  795.  
  796.    public void updateUI() {
  797.       TableColumnModel var1 = this.getColumnModel();
  798.  
  799.       for(int var2 = 0; var2 < var1.getColumnCount(); ++var2) {
  800.          TableColumn var3 = var1.getColumn(var2);
  801.          this.updateSubComponentUI(var3.getCellEditor());
  802.       }
  803.  
  804.       Enumeration var4 = this.defaultEditorsByColumnClass.elements();
  805.  
  806.       while(var4.hasMoreElements()) {
  807.          this.updateSubComponentUI(var4.nextElement());
  808.       }
  809.  
  810.       this.setUI((TableUI)UIManager.getUI(this));
  811.       this.resizeAndRepaint();
  812.       ((Container)this).invalidate();
  813.    }
  814.  
  815.    public String getUIClassID() {
  816.       return "TableUI";
  817.    }
  818.  
  819.    public void setModel(TableModel var1) {
  820.       TableModel var2 = this.dataModel;
  821.       if (var1 == null) {
  822.          throw new IllegalArgumentException("Cannot set a null TableModel");
  823.       } else {
  824.          if (var1 != var2) {
  825.             if (var2 != null) {
  826.                var2.removeTableModelListener(this);
  827.             }
  828.  
  829.             this.dataModel = var1;
  830.             var1.addTableModelListener(this);
  831.             if (this.getColumnModel() != null) {
  832.                this.tableChanged(new TableModelEvent(this.dataModel, -1));
  833.             }
  834.          }
  835.  
  836.       }
  837.    }
  838.  
  839.    public TableModel getModel() {
  840.       return this.dataModel;
  841.    }
  842.  
  843.    public void setColumnModel(TableColumnModel var1) {
  844.       if (var1 == null) {
  845.          throw new IllegalArgumentException("Cannot set a null ColumnModel");
  846.       } else {
  847.          TableColumnModel var2 = this.columnModel;
  848.          if (var1 != var2) {
  849.             if (var2 != null) {
  850.                var2.removeColumnModelListener(this);
  851.             }
  852.  
  853.             this.columnModel = var1;
  854.             var1.addColumnModelListener(this);
  855.             if (this.tableHeader != null) {
  856.                this.tableHeader.setColumnModel(var1);
  857.             }
  858.  
  859.             this.resizeAndRepaint();
  860.          }
  861.  
  862.       }
  863.    }
  864.  
  865.    public TableColumnModel getColumnModel() {
  866.       return this.columnModel;
  867.    }
  868.  
  869.    public void setSelectionModel(ListSelectionModel var1) {
  870.       ListSelectionModel var2 = this.selectionModel;
  871.       if (var1 != var2) {
  872.          if (var2 != null) {
  873.             var2.removeListSelectionListener(this);
  874.          }
  875.  
  876.          this.selectionModel = var1;
  877.          if (var1 != null) {
  878.             var1.addListSelectionListener(this);
  879.          }
  880.  
  881.          ((Component)this).repaint();
  882.       }
  883.  
  884.    }
  885.  
  886.    public ListSelectionModel getSelectionModel() {
  887.       return this.selectionModel;
  888.    }
  889.  
  890.    public void tableChanged(TableModelEvent var1) {
  891.       if (var1 != null && var1.getFirstRow() != -1) {
  892.          if (var1.getType() == 1) {
  893.             this.tableRowsInserted(var1);
  894.          } else if (var1.getType() == -1) {
  895.             this.tableRowsDeleted(var1);
  896.          } else {
  897.             int var2 = var1.getColumn();
  898.             int var3 = var1.getFirstRow();
  899.             int var4 = var1.getLastRow();
  900.             if (var3 == -1) {
  901.                var3 = 0;
  902.                var4 = Integer.MAX_VALUE;
  903.             }
  904.  
  905.             int var5 = this.getRowHeight() + this.rowMargin;
  906.             Rectangle var6;
  907.             if (var2 == -1) {
  908.                var6 = new Rectangle(0, var3 * var5, this.getColumnModel().getTotalColumnWidth(), 0);
  909.             } else {
  910.                int var7 = this.convertColumnIndexToView(var2);
  911.                var6 = this.getCellRect(var3, var7, false);
  912.             }
  913.  
  914.             if (var4 != Integer.MAX_VALUE) {
  915.                var6.height = (var4 - var3 + 1) * var5;
  916.                ((Component)this).repaint(var6.x, var6.y, var6.width, var6.height);
  917.             } else {
  918.                this.resizeAndRepaint();
  919.             }
  920.          }
  921.       } else {
  922.          this.clearSelection();
  923.          if (this.getAutoCreateColumnsFromModel()) {
  924.             this.createDefaultColumnsFromModel();
  925.          }
  926.  
  927.          this.resizeAndRepaint();
  928.          if (this.tableHeader != null) {
  929.             this.tableHeader.resizeAndRepaint();
  930.          }
  931.  
  932.       }
  933.    }
  934.  
  935.    private void tableRowsInserted(TableModelEvent var1) {
  936.       int var2 = var1.getFirstRow();
  937.       if (var2 < 0) {
  938.          var2 = 0;
  939.       }
  940.  
  941.       int var3 = this.getRowHeight() + this.rowMargin;
  942.       Rectangle var4 = new Rectangle(0, var2 * var3, this.getColumnModel().getTotalColumnWidth(), (this.getRowCount() - var2) * var3);
  943.       if (this.selectionModel != null) {
  944.          int var5 = var1.getLastRow();
  945.          if (var5 < 0) {
  946.             var5 = this.getRowCount() - 1;
  947.          }
  948.  
  949.          int var6 = var5 - var2 + 1;
  950.          this.selectionModel.insertIndexInterval(var2, var6, true);
  951.       }
  952.  
  953.       ((JComponent)this).revalidate();
  954.       ((Component)this).repaint(var4.x, var4.y, var4.width, var4.height);
  955.    }
  956.  
  957.    private void tableRowsDeleted(TableModelEvent var1) {
  958.       int var2 = var1.getFirstRow();
  959.       if (var2 < 0) {
  960.          var2 = 0;
  961.       }
  962.  
  963.       int var3 = this.getRowHeight() + this.rowMargin;
  964.       Rectangle var4 = new Rectangle(0, var2 * var3, this.getColumnModel().getTotalColumnWidth(), (this.getRowCount() - var2) * var3);
  965.       if (this.selectionModel != null) {
  966.          int var5 = var1.getLastRow();
  967.          if (var5 < 0) {
  968.             var5 = this.getRowCount() - 1;
  969.          }
  970.  
  971.          this.selectionModel.removeIndexInterval(var2, var5);
  972.       }
  973.  
  974.       ((JComponent)this).revalidate();
  975.       ((Component)this).repaint(var4.x, var4.y, var4.width, var4.height);
  976.    }
  977.  
  978.    public void columnAdded(TableColumnModelEvent var1) {
  979.       if (this.isEditing()) {
  980.          this.removeEditor();
  981.       }
  982.  
  983.       this.resizeAndRepaint();
  984.    }
  985.  
  986.    public void columnRemoved(TableColumnModelEvent var1) {
  987.       if (this.isEditing()) {
  988.          this.removeEditor();
  989.       }
  990.  
  991.       this.resizeAndRepaint();
  992.    }
  993.  
  994.    public void columnMoved(TableColumnModelEvent var1) {
  995.       if (this.isEditing()) {
  996.          this.removeEditor();
  997.       }
  998.  
  999.       ((Component)this).repaint();
  1000.    }
  1001.  
  1002.    public void columnMarginChanged(ChangeEvent var1) {
  1003.       if (this.isEditing()) {
  1004.          this.removeEditor();
  1005.       }
  1006.  
  1007.       this.resizeAndRepaint();
  1008.    }
  1009.  
  1010.    public void columnSelectionChanged(ListSelectionEvent var1) {
  1011.       if (this.isEditing()) {
  1012.          this.removeEditor();
  1013.       }
  1014.  
  1015.       int var2 = var1.getFirstIndex();
  1016.       int var3 = var1.getLastIndex();
  1017.       if (var2 == -1 && var3 == -1) {
  1018.          ((Component)this).repaint();
  1019.       }
  1020.  
  1021.       Rectangle var4 = this.getCellRect(0, var2, false);
  1022.       Rectangle var5 = this.getCellRect(this.getRowCount(), var3, false);
  1023.       Rectangle var6 = var4.union(var5);
  1024.       ((Component)this).repaint(var6.x, var6.y, var6.width, var6.height);
  1025.    }
  1026.  
  1027.    public void valueChanged(ListSelectionEvent var1) {
  1028.       int var2 = var1.getFirstIndex();
  1029.       int var3 = var1.getLastIndex();
  1030.       if (var2 == -1 && var3 == -1) {
  1031.          ((Component)this).repaint();
  1032.       }
  1033.  
  1034.       Rectangle var4 = this.getCellRect(var2, 0, false);
  1035.       Rectangle var5 = this.getCellRect(var3, this.getColumnCount(), false);
  1036.       Rectangle var6 = var4.union(var5);
  1037.       ((Component)this).repaint(var6.x, var6.y, var6.width, var6.height);
  1038.    }
  1039.  
  1040.    public void editingStopped(ChangeEvent var1) {
  1041.       TableCellEditor var2 = this.getCellEditor();
  1042.       if (var2 != null) {
  1043.          Object var3 = var2.getCellEditorValue();
  1044.          this.setValueAt(var3, this.editingRow, this.editingColumn);
  1045.          this.removeEditor();
  1046.       }
  1047.  
  1048.    }
  1049.  
  1050.    public void editingCanceled(ChangeEvent var1) {
  1051.       this.removeEditor();
  1052.    }
  1053.  
  1054.    public void setPreferredScrollableViewportSize(Dimension var1) {
  1055.       this.preferredViewportSize = var1;
  1056.    }
  1057.  
  1058.    public Dimension getPreferredScrollableViewportSize() {
  1059.       return this.preferredViewportSize;
  1060.    }
  1061.  
  1062.    public int getScrollableUnitIncrement(Rectangle var1, int var2, int var3) {
  1063.       return var2 == 0 ? 1 : this.rowHeight;
  1064.    }
  1065.  
  1066.    public int getScrollableBlockIncrement(Rectangle var1, int var2, int var3) {
  1067.       return var2 == 1 ? var1.height : var1.width;
  1068.    }
  1069.  
  1070.    public boolean getScrollableTracksViewportWidth() {
  1071.       return false;
  1072.    }
  1073.  
  1074.    public boolean getScrollableTracksViewportHeight() {
  1075.       return false;
  1076.    }
  1077.  
  1078.    protected void createDefaultRenderers() {
  1079.       this.defaultRenderersByColumnClass = new Hashtable();
  1080.       DefaultTableCellRenderer var1 = new DefaultTableCellRenderer();
  1081.       this.setDefaultRenderer(class$java$lang$Object != null ? class$java$lang$Object : (class$java$lang$Object = JComponent.class$("java.lang.Object")), var1);
  1082.       DefaultTableCellRenderer var2 = new DefaultTableCellRenderer();
  1083.       ((JLabel)var2).setHorizontalAlignment(4);
  1084.       this.setDefaultRenderer(class$java$lang$Number != null ? class$java$lang$Number : (class$java$lang$Number = JComponent.class$("java.lang.Number")), var2);
  1085.       1 var3 = new 1();
  1086.       ((JLabel)var3).setHorizontalAlignment(0);
  1087.       this.setDefaultRenderer(class$com$sun$java$swing$ImageIcon != null ? class$com$sun$java$swing$ImageIcon : (class$com$sun$java$swing$ImageIcon = JComponent.class$("com.sun.java.swing.ImageIcon")), var3);
  1088.       CheckBoxRenderer var4 = new CheckBoxRenderer(this);
  1089.       ((AbstractButton)var4).setHorizontalAlignment(0);
  1090.       this.setDefaultRenderer(class$java$lang$Boolean != null ? class$java$lang$Boolean : (class$java$lang$Boolean = JComponent.class$("java.lang.Boolean")), var4);
  1091.    }
  1092.  
  1093.    protected void createDefaultEditors() {
  1094.       this.defaultEditorsByColumnClass = new Hashtable();
  1095.       JTextField var1 = new JTextField();
  1096.       ((JComponent)var1).setBorder(new LineBorder(Color.black));
  1097.       this.setDefaultEditor(class$java$lang$Object != null ? class$java$lang$Object : (class$java$lang$Object = JComponent.class$("java.lang.Object")), new DefaultCellEditor(var1));
  1098.       JTextField var2 = new JTextField();
  1099.       var2.setHorizontalAlignment(4);
  1100.       ((JComponent)var2).setBorder(new LineBorder(Color.black));
  1101.       this.setDefaultEditor(class$java$lang$Number != null ? class$java$lang$Number : (class$java$lang$Number = JComponent.class$("java.lang.Number")), new DefaultCellEditor(var2));
  1102.       JCheckBox var3 = new JCheckBox();
  1103.       ((AbstractButton)var3).setHorizontalAlignment(0);
  1104.       this.setDefaultEditor(class$java$lang$Boolean != null ? class$java$lang$Boolean : (class$java$lang$Boolean = JComponent.class$("java.lang.Boolean")), new DefaultCellEditor(var3));
  1105.    }
  1106.  
  1107.    protected void initializeLocalVars() {
  1108.       this.createDefaultRenderers();
  1109.       this.createDefaultEditors();
  1110.       this.setTableHeader(this.createDefaultTableHeader());
  1111.       this.setShowGrid(true);
  1112.       this.setAutoResizeMode(2);
  1113.       this.setRowHeight(16);
  1114.       this.setIntercellSpacing(new Dimension(1, 1));
  1115.       this.setSelectionMode(2);
  1116.       this.setColumnSelectionAllowed(false);
  1117.       this.setRowSelectionAllowed(true);
  1118.       this.setCellSelectionEnabled(false);
  1119.       this.setAutoCreateColumnsFromModel(true);
  1120.       this.cellEditor = null;
  1121.       this.editingColumn = this.editingRow = -1;
  1122.       this.preferredViewportSize = new Dimension(450, 400);
  1123.       ToolTipManager var1 = ToolTipManager.sharedInstance();
  1124.       var1.registerComponent(this);
  1125.       ((JComponent)this).setAutoscrolls(true);
  1126.       this.tableHeader.setAutoscrolls(true);
  1127.    }
  1128.  
  1129.    protected TableModel createDefaultDataModel() {
  1130.       return new DefaultTableModel();
  1131.    }
  1132.  
  1133.    protected TableColumnModel createDefaultColumnModel() {
  1134.       return new DefaultTableColumnModel();
  1135.    }
  1136.  
  1137.    protected ListSelectionModel createDefaultSelectionModel() {
  1138.       DefaultListSelectionModel var1 = new DefaultListSelectionModel();
  1139.       var1.setLeadAnchorNotificationEnabled(false);
  1140.       return var1;
  1141.    }
  1142.  
  1143.    protected JTableHeader createDefaultTableHeader() {
  1144.       return new JTableHeader(this.columnModel);
  1145.    }
  1146.  
  1147.    protected void resizeAndRepaint() {
  1148.       ((JComponent)this).revalidate();
  1149.       ((Component)this).repaint();
  1150.    }
  1151.  
  1152.    public TableCellEditor getCellEditor() {
  1153.       return this.cellEditor;
  1154.    }
  1155.  
  1156.    public void setCellEditor(TableCellEditor var1) {
  1157.       this.cellEditor = var1;
  1158.    }
  1159.  
  1160.    public void setEditingColumn(int var1) {
  1161.       this.editingColumn = var1;
  1162.    }
  1163.  
  1164.    public void setEditingRow(int var1) {
  1165.       this.editingRow = var1;
  1166.    }
  1167.  
  1168.    public boolean isOpaque() {
  1169.       return true;
  1170.    }
  1171.  
  1172.    public Component prepareEditor(TableCellEditor var1, int var2, int var3) {
  1173.       Object var4 = this.getValueAt(var2, var3);
  1174.       this.getColumnModel().getColumn(var3);
  1175.       boolean var5 = this.isCellSelected(var2, var3);
  1176.       Component var6 = var1.getTableCellEditorComponent(this, var4, var5, var2, var3);
  1177.       if (var6 != null && var6.getFont() == null) {
  1178.          var6.setFont(((Component)this).getFont());
  1179.       }
  1180.  
  1181.       return var6;
  1182.    }
  1183.  
  1184.    public void removeEditor() {
  1185.       TableCellEditor var1 = this.getCellEditor();
  1186.       if (var1 != null) {
  1187.          var1.removeCellEditorListener(this);
  1188.          if (this.editorComp instanceof JComboBox) {
  1189.             ((JComboBox)this.editorComp).hidePopup();
  1190.          }
  1191.  
  1192.          ((Container)this).remove(this.editorComp);
  1193.          Rectangle var2 = this.getCellRect(this.editingRow, this.editingColumn, false);
  1194.          ((Component)this).repaint(var2.x, var2.y, var2.width, var2.height);
  1195.          if (!(this.editorComp instanceof JComponent) || ((JComponent)this.editorComp).hasFocus()) {
  1196.             ((JComponent)this).requestFocus();
  1197.          }
  1198.  
  1199.          this.setCellEditor((TableCellEditor)null);
  1200.          this.setEditingColumn(-1);
  1201.          this.setEditingRow(-1);
  1202.          this.editorComp = null;
  1203.       }
  1204.  
  1205.    }
  1206.  
  1207.    private void writeObject(ObjectOutputStream var1) throws IOException {
  1208.       var1.defaultWriteObject();
  1209.    }
  1210.  
  1211.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  1212.       var1.defaultReadObject();
  1213.       this.createDefaultRenderers();
  1214.       this.createDefaultEditors();
  1215.    }
  1216.  
  1217.    public AccessibleContext getAccessibleContext() {
  1218.       if (super.accessibleContext == null) {
  1219.          super.accessibleContext = new AccessibleJTable(this);
  1220.       }
  1221.  
  1222.       return super.accessibleContext;
  1223.    }
  1224. }
  1225.