scrollpanelayout.java
来自「Mac OS X 10.4.9 for x86 Source Code gcc」· Java 代码 · 共 476 行 · 第 1/2 页
JAVA
476 行
Insets viewportInsets = null; if (viewportBorder != null) { viewportInsets = viewportBorder.getBorderInsets(parent); if (viewportInsets != null) viewportInsetsSize.setSize(viewportInsets.left + viewportInsets.right, viewportInsets.top + viewportInsets.bottom); } if (insets != null) insetsSize.setSize(insets.left + insets.right, insets.top + insets.bottom); if (viewport != null) { Component view = null; Scrollable scr = null; Dimension pref = null; view = viewport.getView(); if (view != null && view instanceof Scrollable) scr = (Scrollable) view; if (scr != null) pref = scr.getPreferredScrollableViewportSize(); if (pref == null) pref = viewport.getPreferredSize(); if (pref != null) viewportSize.setSize(pref); } maybeSetPreferredSize(colHead, columnHeaderSize); maybeSetPreferredSize(rowHead, rowHeaderSize); maybeSetPreferredSize(vsb, verticalScrollBarSize); maybeSetPreferredSize(hsb, horizontalScrollBarSize); return new Dimension(insetsSize.width + viewportSize.width + viewportInsetsSize.width + rowHeaderSize.width + verticalScrollBarSize.width, insetsSize.height + viewportSize.height + viewportInsetsSize.height + columnHeaderSize.height + horizontalScrollBarSize.height); } } else { return new Dimension(0,0); } } public Dimension minimumLayoutSize(Container parent) { if (parent instanceof JScrollPane) { JScrollPane sc = (JScrollPane) parent; synchronized (sc.getTreeLock ()) { Dimension insetsSize = new Dimension(0,0); Dimension viewportSize = new Dimension(0,0); Dimension viewportInsetsSize = new Dimension(0,0); Dimension columnHeaderSize = new Dimension(0,0); Dimension rowHeaderSize = new Dimension(0,0); Dimension verticalScrollBarSize = new Dimension(0,0); Dimension horizontalScrollBarSize = new Dimension(0,0); Insets insets = sc.getInsets(); Border viewportBorder = sc.getViewportBorder(); Insets viewportInsets = null; if (viewportBorder != null) { viewportInsets = viewportBorder.getBorderInsets(parent); if (viewportInsets != null) viewportInsetsSize.setSize(viewportInsets.left + viewportInsets.right, viewportInsets.top + viewportInsets.bottom); } if (insets != null) insetsSize.setSize(insets.left + insets.right, insets.top + insets.bottom); maybeSetMinimumSize(colHead, columnHeaderSize); maybeSetMinimumSize(rowHead, rowHeaderSize); if (vsbPolicy != VERTICAL_SCROLLBAR_NEVER) maybeSetMinimumSize(vsb, verticalScrollBarSize); if (hsbPolicy != HORIZONTAL_SCROLLBAR_NEVER) maybeSetMinimumSize(hsb, horizontalScrollBarSize); return new Dimension(insetsSize.width + viewportSize.width + viewportInsetsSize.width + rowHeaderSize.width + verticalScrollBarSize.width, insetsSize.height + viewportSize.height + viewportInsetsSize.height + columnHeaderSize.height + horizontalScrollBarSize.height); } } else { return new Dimension(0,0); } } /** * * +----+--------------------+----+ y1 * | c1 | column header | c2 | * +----+--------------------+----+ y2 * | r | | v | * | o | | | * | w | | s | * | | | r | * | h | | o | * | e | viewport | l | * | a | | l | * | d | | b | * | e | | a | * | r | | r | * +----+--------------------+----+ y3 * | c3 | h scrollbar | c4 | * +----+--------------------+----+ y4 * x1 x2 x3 x4 * */ public void layoutContainer(Container parent) { if (parent instanceof JScrollPane) { JScrollPane sc = (JScrollPane) parent; synchronized (sc.getTreeLock ()) { JViewport viewport = sc.getViewport(); Dimension viewSize = viewport.getViewSize(); Point viewPos = viewport.getViewPosition(); int x1 = 0, x2 = 0, x3 = 0, x4 = 0; int y1 = 0, y2 = 0, y3 = 0, y4 = 0; Rectangle scrollPaneBounds = SwingUtilities.calculateInnerArea(sc, null); x1 = scrollPaneBounds.x; y1 = scrollPaneBounds.y; x4 = scrollPaneBounds.x + scrollPaneBounds.width; y4 = scrollPaneBounds.y + scrollPaneBounds.height; if (colHead != null) y2 = y1 + colHead.getPreferredSize().height; else y2 = y1; if (rowHead != null) x2 = x1 + rowHead.getPreferredSize().width; else x2 = x1; int vsbPolicy = sc.getVerticalScrollBarPolicy(); int hsbPolicy = sc.getHorizontalScrollBarPolicy(); x3 = x4 - vsb.getPreferredSize().width; y3 = y4 - hsb.getPreferredSize().height; boolean showVsb = (vsb != null) && ((vsbPolicy == VERTICAL_SCROLLBAR_ALWAYS) || (vsbPolicy == VERTICAL_SCROLLBAR_AS_NEEDED && viewSize.height > (y3 - y2))); boolean showHsb = (hsb != null) && ((hsbPolicy == HORIZONTAL_SCROLLBAR_ALWAYS) || (hsbPolicy == HORIZONTAL_SCROLLBAR_AS_NEEDED && viewSize.width > (x3 - x2))); if (!showVsb) x3 = x4; if (!showHsb) y3 = y4; // now set the layout if (viewport != null) viewport.setBounds(new Rectangle(x2, y2, x3-x2, y3-y2)); if (colHead != null) colHead.setBounds(new Rectangle(x2, y1, x3-x2, y2-y1)); if (rowHead != null) rowHead.setBounds(new Rectangle(x1, y2, x2-x1, y3-y2)); if (showVsb) { vsb.setVisible(true); vsb.setBounds(new Rectangle(x3, y2, x4-x3, y3-y2)); } else if (vsb != null) vsb.setVisible(false); if (showHsb) { hsb.setVisible(true); hsb.setBounds(new Rectangle(x2, y3, x3-x2, y4-y3)); } else if (hsb != null) hsb.setVisible(false); if (upperLeft != null) upperLeft.setBounds(new Rectangle(x1, y1, x2-x1, y2-y1)); if (upperRight != null) upperRight.setBounds(new Rectangle(x3, y1, x4-x3, y2-y1)); if (lowerLeft != null) lowerLeft.setBounds(new Rectangle(x1, y3, x2-x1, y4-y3)); if (lowerRight != null) lowerRight.setBounds(new Rectangle(x3, y3, x4-x3, y4-y3)); } } } public Rectangle getViewportBorderBounds(JScrollPane scrollPane) { return null; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?