synthtoolbarui.java
来自「java jdk 1.4的源码」· Java 代码 · 共 1,086 行 · 第 1/3 页
JAVA
1,086 行
case WEST: case NORTH: if (focusedCompIndex < 0 || focusedCompIndex >= nComp) break; j = focusedCompIndex - 1; while (j != focusedCompIndex) { if (j < 0) j = nComp - 1; Component comp = toolBar.getComponentAtIndex(j--); if (comp != null && comp.isFocusTraversable()) { comp.requestFocus(); break; } } break; default: break; } } /** * No longer used, use BasicToolBarUI.createFloatingWindow(JToolBar) * @see #createFloatingWindow */ protected JFrame createFloatingFrame(JToolBar toolbar) { Window window = SwingUtilities.getWindowAncestor(toolbar); JFrame frame = new JFrame(toolbar.getName(), (window != null) ? window.getGraphicsConfiguration() : null) { // Override createRootPane() to automatically resize // the frame when contents change protected JRootPane createRootPane() { JRootPane rootPane = new JRootPane() { private boolean packing = false; public void validate() { super.validate(); if (!packing) { packing = true; pack(); packing = false; } } }; rootPane.setOpaque(true); return rootPane; } }; frame.getRootPane().setName("ToolBar.FloatingFrame"); frame.setResizable(false); WindowListener wl = createFrameListener(); frame.addWindowListener(wl); return frame; } /** * Creates a window which contains the toolbar after it has been * dragged out from its container * @returns a <code>RootPaneContainer</code> object, containing the toolbar. */ protected RootPaneContainer createFloatingWindow(JToolBar toolbar) { class ToolBarDialog extends JDialog { public ToolBarDialog(Frame owner, String title, boolean modal) { super(owner, title, modal); } public ToolBarDialog(Dialog owner, String title, boolean modal) { super(owner, title, modal); } // Override createRootPane() to automatically resize // the frame when contents change protected JRootPane createRootPane() { JRootPane rootPane = new JRootPane() { private boolean packing = false; public void validate() { super.validate(); if (!packing) { packing = true; pack(); packing = false; } } }; rootPane.setOpaque(true); return rootPane; } } JDialog dialog; Window window = SwingUtilities.getWindowAncestor(toolbar); if (window instanceof Frame) { dialog = new ToolBarDialog((Frame)window, toolbar.getName(), false); } else if (window instanceof Dialog) { dialog = new ToolBarDialog((Dialog)window, toolbar.getName(), false); } else { dialog = new ToolBarDialog((Frame)null, toolbar.getName(), false); } dialog.getRootPane().setName("ToolBar.FloatingWindow"); dialog.setTitle(toolbar.getName()); dialog.setResizable(false); WindowListener wl = createFrameListener(); dialog.addWindowListener(wl); return dialog; } protected DragWindow createDragWindow(JToolBar toolbar) { Window frame = null; if(toolBar != null) { Container p; for(p = toolBar.getParent() ; p != null && !(p instanceof Window) ; p = p.getParent()); if(p != null && p instanceof Window) frame = (Window) p; } if(floatingToolBar == null) { floatingToolBar = createFloatingWindow(toolBar); } if (floatingToolBar instanceof Window) frame = (Window) floatingToolBar; DragWindow dragWindow = new DragWindow(frame); return dragWindow; } public Dimension getMinimumSize(JComponent c) { return getPreferredSize(c); } public Dimension getPreferredSize(JComponent c) { return null; } public Dimension getMaximumSize(JComponent c) { return getPreferredSize(c); } public void setFloatingLocation(int x, int y) { floatingX = x; floatingY = y; } public boolean isFloating() { return floating; } public void setFloating(boolean b, Point p) { if (toolBar.isFloatable() == true) { if (dragWindow != null) dragWindow.setVisible(false); this.floating = b; if (b == true) { if (dockingSource == null) { dockingSource = toolBar.getParent(); dockingSource.remove(toolBar); } Point l = new Point(); toolBar.getLocation(l); constraintBeforeFloating = calculateConstraint(dockingSource, l); if ( propertyListener != null ) UIManager.addPropertyChangeListener( propertyListener ); if (floatingToolBar == null) floatingToolBar = createFloatingWindow(toolBar); floatingToolBar.getContentPane().add(toolBar,BorderLayout.CENTER); setOrientation( JToolBar.HORIZONTAL ); if (floatingToolBar instanceof Window) ((Window)floatingToolBar).pack(); if (floatingToolBar instanceof Window) ((Window)floatingToolBar).setLocation(floatingX, floatingY); if (floatingToolBar instanceof Window) ((Window)floatingToolBar).show(); } else { if (floatingToolBar == null) floatingToolBar = createFloatingWindow(toolBar); if (floatingToolBar instanceof Window) ((Window)floatingToolBar).setVisible(false); floatingToolBar.getContentPane().remove(toolBar); String constraint = getDockingConstraint(dockingSource, p); int orientation = mapConstraintToOrientation(constraint); setOrientation(orientation); if (dockingSource== null) dockingSource = toolBar.getParent(); if ( propertyListener != null ) UIManager.removePropertyChangeListener( propertyListener ); dockingSource.add(constraint, toolBar); } dockingSource.invalidate(); Container dockingSourceParent = dockingSource.getParent(); if (dockingSourceParent != null) dockingSourceParent.validate(); dockingSource.repaint(); } } private int mapConstraintToOrientation(String constraint) { int orientation = toolBar.getOrientation(); if (constraint != null) { if (constraint.equals(BorderLayout.EAST) || constraint.equals(BorderLayout.WEST)) orientation = JToolBar.VERTICAL; else if (constraint.equals(BorderLayout.NORTH) || constraint.equals(BorderLayout.SOUTH)) orientation = JToolBar.HORIZONTAL; } return orientation; } public void setOrientation(int orientation) { toolBar.setOrientation(orientation); if (dragWindow != null) dragWindow.setOrientation(orientation); } public boolean canDock(Component c, Point p) { boolean b = false; if (c.contains(p)) { dockingSensitivity = (toolBar.getOrientation() == JToolBar.HORIZONTAL) ? toolBar.getSize().height : toolBar.getSize().width; // North if (p.y < dockingSensitivity) b = true; // South if (p.y > c.getSize().height-dockingSensitivity) b = true; // West (Base distance on height for now!) if (p.x < dockingSensitivity) b = true; // East (Base distance on height for now!) if (p.x > c.getSize().width-dockingSensitivity) b = true; } return b; } private String calculateConstraint(Component c, Point p) { if (p == null) return constraintBeforeFloating; String s = BorderLayout.NORTH; if (c.contains(p)) { dockingSensitivity = (toolBar.getOrientation() == JToolBar.HORIZONTAL) ? toolBar.getSize().height : toolBar.getSize().width; if (p.y >= dockingSource.getSize().height-dockingSensitivity) s = BorderLayout.SOUTH; // West (Base distance on height for now!) else if (p.x < dockingSensitivity && (toolBar.getOrientation() == JToolBar.VERTICAL)) s = BorderLayout.WEST; // East (Base distance on height for now!) else if (p.x >= dockingSource.getSize().width-dockingSensitivity && (toolBar.getOrientation() == JToolBar.VERTICAL)) s = BorderLayout.EAST; // North (Base distance on height for now!) else if (p.y < dockingSensitivity) s = BorderLayout.NORTH; } return s; } private String getDockingConstraint(Component c, Point p) { if (p == null) return constraintBeforeFloating; String s = BorderLayout.NORTH; if (c.contains(p)) { dockingSensitivity = (toolBar.getOrientation() == JToolBar.HORIZONTAL) ? toolBar.getSize().height : toolBar.getSize().width; if (p.y >= dockingSource.getSize().height-dockingSensitivity) s = BorderLayout.SOUTH; // West (Base distance on height for now!) if (p.x < dockingSensitivity) s = BorderLayout.WEST; // East (Base distance on height for now!) if (p.x >= dockingSource.getSize().width-dockingSensitivity) s = BorderLayout.EAST; // North (Base distance on height for now!) if (p.y < dockingSensitivity) s = BorderLayout.NORTH; } return s; } protected void dragTo(Point position, Point origin) { if (toolBar.isFloatable() == true) { try { if (dragWindow == null) dragWindow = createDragWindow(toolBar); Point offset = dragWindow.getOffset(); if (offset == null) { Dimension size = toolBar.getPreferredSize(); offset = new Point(size.width/2, size.height/2); dragWindow.setOffset(offset); } Point global = new Point(origin.x+ position.x, origin.y+position.y); Point dragPoint = new Point(global.x- offset.x, global.y- offset.y); if (dockingSource == null) dockingSource = toolBar.getParent(); Point p = new Point(origin); SwingUtilities.convertPointFromScreen(p,toolBar.getParent()); constraintBeforeFloating = calculateConstraint(dockingSource, p); Point dockingPosition = dockingSource.getLocationOnScreen(); Point comparisonPoint = new Point(global.x-dockingPosition.x, global.y-dockingPosition.y); if (canDock(dockingSource, comparisonPoint)) { String constraint = getDockingConstraint(dockingSource, comparisonPoint); int orientation = mapConstraintToOrientation(constraint); dragWindow.setOrientation(orientation); } else { dragWindow.setOrientation( JToolBar.HORIZONTAL ); } dragWindow.setLocation(dragPoint.x, dragPoint.y); if (dragWindow.isVisible() == false) { Dimension size = toolBar.getPreferredSize(); dragWindow.setSize(size.width, size.height); dragWindow.show(); } } catch ( IllegalComponentStateException e ) { } } } protected void floatAt(Point position, Point origin) { if(toolBar.isFloatable() == true) { try { Point offset = dragWindow.getOffset(); if (offset == null) { offset = position; dragWindow.setOffset(offset); } Point global = new Point(origin.x+ position.x, origin.y+position.y); setFloatingLocation(global.x-offset.x, global.y-offset.y); if (dockingSource != null) { Point dockingPosition = dockingSource.getLocationOnScreen(); Point comparisonPoint = new Point(global.x-dockingPosition.x, global.y-dockingPosition.y); if (canDock(dockingSource, comparisonPoint)) { setFloating(false, comparisonPoint); } else { setFloating(true, null); } } else { setFloating(true, null); } dragWindow.setOffset(null); } catch ( IllegalComponentStateException e ) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?