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 + -
显示快捷键?