home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 144 / DPCS0200.iso / Internet / Supanet / system / swing.jar / javax / swing / plaf / basic / BasicTableUI.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  10.9 KB  |  400 lines

  1. package javax.swing.plaf.basic;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Point;
  9. import java.awt.Rectangle;
  10. import java.awt.event.FocusListener;
  11. import java.awt.event.KeyListener;
  12. import java.util.Enumeration;
  13. import javax.swing.CellRendererPane;
  14. import javax.swing.JComponent;
  15. import javax.swing.JScrollPane;
  16. import javax.swing.JTable;
  17. import javax.swing.KeyStroke;
  18. import javax.swing.ListSelectionModel;
  19. import javax.swing.LookAndFeel;
  20. import javax.swing.UIManager;
  21. import javax.swing.event.MouseInputListener;
  22. import javax.swing.plaf.ComponentUI;
  23. import javax.swing.plaf.TableUI;
  24. import javax.swing.plaf.UIResource;
  25. import javax.swing.table.JTableHeader;
  26. import javax.swing.table.TableCellRenderer;
  27. import javax.swing.table.TableColumn;
  28.  
  29. public class BasicTableUI extends TableUI {
  30.    protected JTable table;
  31.    protected CellRendererPane rendererPane;
  32.    protected KeyListener keyListener;
  33.    protected FocusListener focusListener;
  34.    protected MouseInputListener mouseInputListener;
  35.  
  36.    // $FF: synthetic method
  37.    static void access$0(BasicTableUI var0, int var1, int var2, boolean var3, boolean var4) {
  38.       var0.updateSelection(var1, var2, var3, var4);
  39.    }
  40.  
  41.    protected FocusListener createFocusListener() {
  42.       return new FocusHandler(this);
  43.    }
  44.  
  45.    protected KeyListener createKeyListener() {
  46.       return new KeyHandler(this);
  47.    }
  48.  
  49.    protected MouseInputListener createMouseInputListener() {
  50.       return new MouseInputHandler(this);
  51.    }
  52.  
  53.    private Dimension createTableSize(long var1) {
  54.       int var3 = this.table.getRowCount() * (this.table.getRowHeight() + this.table.getRowMargin());
  55.       int var4 = this.table.getColumnModel().getColumnMargin() * this.table.getColumnCount();
  56.       long var5 = Math.abs(var1) + (long)var4;
  57.       if (var5 > 2147483647L) {
  58.          var5 = 2147483647L;
  59.       }
  60.  
  61.       return new Dimension((int)var5, var3);
  62.    }
  63.  
  64.    public static ComponentUI createUI(JComponent var0) {
  65.       return new BasicTableUI();
  66.    }
  67.  
  68.    public Dimension getMaximumSize(JComponent var1) {
  69.       long var2 = 0L;
  70.  
  71.       TableColumn var5;
  72.       for(Enumeration var4 = this.table.getColumnModel().getColumns(); var4.hasMoreElements(); var2 += (long)var5.getMaxWidth()) {
  73.          var5 = (TableColumn)var4.nextElement();
  74.       }
  75.  
  76.       return this.createTableSize(var2);
  77.    }
  78.  
  79.    public Dimension getMinimumSize(JComponent var1) {
  80.       long var2 = 0L;
  81.  
  82.       TableColumn var5;
  83.       for(Enumeration var4 = this.table.getColumnModel().getColumns(); var4.hasMoreElements(); var2 += (long)var5.getMinWidth()) {
  84.          var5 = (TableColumn)var4.nextElement();
  85.       }
  86.  
  87.       return this.createTableSize(var2);
  88.    }
  89.  
  90.    public Dimension getPreferredSize(JComponent var1) {
  91.       long var2 = 0L;
  92.  
  93.       TableColumn var5;
  94.       for(Enumeration var4 = this.table.getColumnModel().getColumns(); var4.hasMoreElements(); var2 += (long)var5.getPreferredWidth()) {
  95.          var5 = (TableColumn)var4.nextElement();
  96.       }
  97.  
  98.       return this.createTableSize(var2);
  99.    }
  100.  
  101.    protected void installDefaults() {
  102.       LookAndFeel.installColorsAndFont(this.table, "Table.background", "Table.foreground", "Table.font");
  103.       Color var1 = this.table.getSelectionBackground();
  104.       if (var1 == null || var1 instanceof UIResource) {
  105.          this.table.setSelectionBackground(UIManager.getColor("Table.selectionBackground"));
  106.       }
  107.  
  108.       Color var2 = this.table.getSelectionForeground();
  109.       if (var2 == null || var2 instanceof UIResource) {
  110.          this.table.setSelectionForeground(UIManager.getColor("Table.selectionForeground"));
  111.       }
  112.  
  113.       Color var3 = this.table.getGridColor();
  114.       if (var3 == null || var3 instanceof UIResource) {
  115.          this.table.setGridColor(UIManager.getColor("Table.gridColor"));
  116.       }
  117.  
  118.       Container var4 = this.table.getParent();
  119.       if (var4 != null) {
  120.          var4 = ((Component)var4).getParent();
  121.          if (var4 != null && var4 instanceof JScrollPane) {
  122.             LookAndFeel.installBorder((JScrollPane)var4, "Table.scrollPaneBorder");
  123.          }
  124.       }
  125.  
  126.    }
  127.  
  128.    protected void installKeyboardActions() {
  129.       byte var1 = 1;
  130.       byte var2 = 2;
  131.       this.registerKey(39, 0, 1, 0);
  132.       this.registerKey(37, 0, -1, 0);
  133.       this.registerKey(40, 0, 0, 1);
  134.       this.registerKey(38, 0, 0, -1);
  135.       this.registerKey(39, var1, 1, 0);
  136.       this.registerKey(37, var1, -1, 0);
  137.       this.registerKey(40, var1, 0, 1);
  138.       this.registerKey(38, var1, 0, -1);
  139.       this.registerKey(9, 0, 1, 0, true, false, true, true);
  140.       this.registerKey(9, var1, -1, 0, true, false, true, true);
  141.       this.registerKey(10, 0, 0, 1, true, false, true, true);
  142.       this.registerKey(10, var1, 0, -1, true, false, true, true);
  143.       this.table.registerKeyboardAction(new 1(this), KeyStroke.getKeyStroke(65, var2), 0);
  144.       this.table.registerKeyboardAction(new 2(this), KeyStroke.getKeyStroke(27, 0), 0);
  145.    }
  146.  
  147.    protected void installListeners() {
  148.       this.focusListener = this.createFocusListener();
  149.       this.keyListener = this.createKeyListener();
  150.       this.mouseInputListener = this.createMouseInputListener();
  151.       this.table.addFocusListener(this.focusListener);
  152.       this.table.addKeyListener(this.keyListener);
  153.       this.table.addMouseListener(this.mouseInputListener);
  154.       this.table.addMouseMotionListener(this.mouseInputListener);
  155.    }
  156.  
  157.    public void installUI(JComponent var1) {
  158.       this.table = (JTable)var1;
  159.       this.rendererPane = new CellRendererPane();
  160.       this.table.add(this.rendererPane);
  161.       this.installDefaults();
  162.       this.installListeners();
  163.       this.installKeyboardActions();
  164.    }
  165.  
  166.    private int lastVisibleRow(Rectangle var1) {
  167.       int var2 = this.table.rowAtPoint(new Point(0, var1.y + var1.height - 1));
  168.       if (var2 == -1) {
  169.          var2 = this.table.getRowCount() - 1;
  170.       }
  171.  
  172.       return var2;
  173.    }
  174.  
  175.    public void paint(Graphics var1, JComponent var2) {
  176.       Rectangle var3 = var1.getClipBounds();
  177.       Rectangle var4 = new Rectangle(var3);
  178.       int var5 = this.table.getColumnModel().getTotalColumnWidth();
  179.       var4.width = Math.min(var4.width, var5);
  180.       var1.setClip(var4);
  181.       this.paintGrid(var1);
  182.       int var6 = this.table.rowAtPoint(new Point(0, var4.y));
  183.       int var7 = this.lastVisibleRow(var4);
  184.       Rectangle var8 = new Rectangle(0, 0, var5, this.table.getRowHeight() + this.table.getRowMargin());
  185.       var8.y = var6 * var8.height;
  186.  
  187.       for(int var9 = var6; var9 <= var7; ++var9) {
  188.          if (var8.intersects(var4)) {
  189.             this.paintRow(var1, var9);
  190.          }
  191.  
  192.          var8.y += var8.height;
  193.       }
  194.  
  195.       var1.setClip(var3);
  196.    }
  197.  
  198.    private void paintCell(Graphics var1, Rectangle var2, int var3, int var4) {
  199.       int var5 = this.table.getRowMargin();
  200.       int var6 = this.table.getColumnModel().getColumnMargin();
  201.       var2.setBounds(var2.x + var6 / 2, var2.y + var5 / 2, var2.width - var6, var2.height - var5);
  202.       if (this.table.isEditing() && this.table.getEditingRow() == var3 && this.table.getEditingColumn() == var4) {
  203.          Component var9 = this.table.getEditorComponent();
  204.          var9.setBounds(var2);
  205.          var9.validate();
  206.       } else {
  207.          TableCellRenderer var7 = this.table.getCellRenderer(var3, var4);
  208.          Component var8 = this.table.prepareRenderer(var7, var3, var4);
  209.          if (var8.getParent() == null) {
  210.             this.rendererPane.add(var8);
  211.          }
  212.  
  213.          this.rendererPane.paintComponent(var1, var8, this.table, var2.x, var2.y, var2.width, var2.height, true);
  214.       }
  215.  
  216.       var2.setBounds(var2.x - var6 / 2, var2.y - var5 / 2, var2.width + var6, var2.height + var5);
  217.    }
  218.  
  219.    private void paintGrid(Graphics var1) {
  220.       var1.setColor(this.table.getGridColor());
  221.       if (this.table.getShowHorizontalLines()) {
  222.          this.paintHorizontalLines(var1);
  223.       }
  224.  
  225.       if (this.table.getShowVerticalLines()) {
  226.          this.paintVerticalLines(var1);
  227.       }
  228.  
  229.    }
  230.  
  231.    private void paintHorizontalLines(Graphics var1) {
  232.       Rectangle var2 = var1.getClipBounds();
  233.       Rectangle var3 = var2;
  234.       int var4 = this.table.getRowHeight() + this.table.getRowMargin();
  235.       int var5 = this.table.rowAtPoint(new Point(0, var2.y));
  236.       int var6 = this.lastVisibleRow(var2);
  237.       int var7 = var4 * var5 + (var4 - 1);
  238.  
  239.       for(int var8 = var5; var8 <= var6; ++var8) {
  240.          if (var7 >= var3.y && var7 <= var3.y + var3.height) {
  241.             var1.drawLine(var3.x, var7, var3.x + var3.width - 1, var7);
  242.          }
  243.  
  244.          var7 += var4;
  245.       }
  246.  
  247.    }
  248.  
  249.    private void paintRow(Graphics var1, int var2) {
  250.       Rectangle var3 = var1.getClipBounds();
  251.       int var4 = 0;
  252.       boolean var5 = false;
  253.       int var6 = -1;
  254.       Rectangle var7 = null;
  255.       Dimension var8 = this.table.getIntercellSpacing();
  256.       JTableHeader var9 = this.table.getTableHeader();
  257.       Rectangle var10 = new Rectangle();
  258.       var10.height = this.table.getRowHeight() + var8.height;
  259.       var10.y = var2 * var10.height;
  260.  
  261.       for(Enumeration var11 = this.table.getColumnModel().getColumns(); var11.hasMoreElements(); ++var4) {
  262.          TableColumn var12 = (TableColumn)var11.nextElement();
  263.          var10.width = var12.getWidth() + var8.width;
  264.          if (var10.intersects(var3)) {
  265.             var5 = true;
  266.             if (var9 != null && var12 == var9.getDraggedColumn()) {
  267.                var1.setColor(this.table.getParent().getBackground());
  268.                var1.fillRect(var10.x, var10.y, var10.width, var10.height);
  269.                var7 = new Rectangle(var10);
  270.                var6 = var4;
  271.             } else {
  272.                this.paintCell(var1, var10, var2, var4);
  273.             }
  274.          } else if (var5) {
  275.             break;
  276.          }
  277.  
  278.          var10.x += var10.width;
  279.       }
  280.  
  281.       if (var6 != -1 && var7 != null) {
  282.          var7.x += var9.getDraggedDistance();
  283.          var1.setColor(this.table.getBackground());
  284.          var1.fillRect(var7.x, var7.y, var7.width, var7.height);
  285.          var1.setColor(this.table.getGridColor());
  286.          int var16 = var7.x;
  287.          int var13 = var7.y;
  288.          int var14 = var16 + var7.width - 1;
  289.          int var15 = var13 + var7.height - 1;
  290.          if (this.table.getShowVerticalLines()) {
  291.             var1.drawLine(var14, var13, var14, var15);
  292.          }
  293.  
  294.          if (this.table.getShowHorizontalLines()) {
  295.             var1.drawLine(var16, var15, var14, var15);
  296.          }
  297.  
  298.          this.paintCell(var1, var7, var2, var6);
  299.       }
  300.  
  301.    }
  302.  
  303.    private void paintVerticalLines(Graphics var1) {
  304.       Rectangle var2 = var1.getClipBounds();
  305.       int var3 = 0;
  306.       int var4 = this.table.getColumnCount();
  307.       int var5 = this.table.getIntercellSpacing().width;
  308.  
  309.       for(int var6 = 0; var6 <= var4; ++var6) {
  310.          if (var3 > 0 && var3 - 1 >= var2.x && var3 - 1 <= var2.x + var2.width) {
  311.             var1.drawLine(var3 - 1, var2.y, var3 - 1, var2.y + var2.height - 1);
  312.          }
  313.  
  314.          if (var6 < var4) {
  315.             var3 += this.table.getColumnModel().getColumn(var6).getWidth() + var5;
  316.          }
  317.       }
  318.  
  319.    }
  320.  
  321.    private void registerKey(int var1, int var2, int var3, int var4) {
  322.       boolean var5 = (var2 & 2) != 0;
  323.       boolean var6 = (var2 & 1) != 0;
  324.       boolean var7 = var6 ^ true;
  325.       this.registerKey(var1, var2, var3, var4, var5, var6, var7, false);
  326.    }
  327.  
  328.    private void registerKey(int var1, int var2, int var3, int var4, boolean var5, boolean var6, boolean var7, boolean var8) {
  329.       this.table.registerKeyboardAction(new NavigationalAction(this, (3)null, var3, var4, var5, var6, var7, var8), KeyStroke.getKeyStroke(var1, var2), 0);
  330.    }
  331.  
  332.    protected void uninstallDefaults() {
  333.    }
  334.  
  335.    protected void uninstallKeyboardActions() {
  336.       byte var1 = 1;
  337.       byte var2 = 2;
  338.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(38, 0));
  339.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(40, 0));
  340.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(39, 0));
  341.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(37, 0));
  342.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(38, var1));
  343.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(40, var1));
  344.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(39, var1));
  345.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(37, var1));
  346.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(9, 0));
  347.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(9, var1));
  348.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(10, 0));
  349.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(10, var1));
  350.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(65, var2));
  351.       this.table.unregisterKeyboardAction(KeyStroke.getKeyStroke(27, 0));
  352.    }
  353.  
  354.    protected void uninstallListeners() {
  355.       this.table.removeFocusListener(this.focusListener);
  356.       this.table.removeKeyListener(this.keyListener);
  357.       this.table.removeMouseListener(this.mouseInputListener);
  358.       this.table.removeMouseMotionListener(this.mouseInputListener);
  359.       this.focusListener = null;
  360.       this.keyListener = null;
  361.       this.mouseInputListener = null;
  362.    }
  363.  
  364.    public void uninstallUI(JComponent var1) {
  365.       this.uninstallDefaults();
  366.       this.uninstallListeners();
  367.       this.uninstallKeyboardActions();
  368.       this.table.remove(this.rendererPane);
  369.       this.rendererPane = null;
  370.       this.table = null;
  371.    }
  372.  
  373.    private void updateSelection(int var1, int var2, boolean var3, boolean var4) {
  374.       Rectangle var5 = this.table.getCellRect(var1, var2, false);
  375.       if (var5 != null) {
  376.          this.table.scrollRectToVisible(var5);
  377.       }
  378.  
  379.       ListSelectionModel var6 = this.table.getSelectionModel();
  380.       ListSelectionModel var7 = this.table.getColumnModel().getSelectionModel();
  381.       this.updateSelectionModel(var7, var2, var3, var4);
  382.       this.updateSelectionModel(var6, var1, var3, var4);
  383.    }
  384.  
  385.    private void updateSelectionModel(ListSelectionModel var1, int var2, boolean var3, boolean var4) {
  386.       if (!var4) {
  387.          if (!var3) {
  388.             var1.setSelectionInterval(var2, var2);
  389.          } else if (var1.isSelectedIndex(var2)) {
  390.             var1.removeSelectionInterval(var2, var2);
  391.          } else {
  392.             var1.addSelectionInterval(var2, var2);
  393.          }
  394.       } else {
  395.          var1.setLeadSelectionIndex(var2);
  396.       }
  397.  
  398.    }
  399. }
  400.