jnsimplecontainer.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 440 行

JAVA
440
字号
/*
 * $Id: JNSimpleContainer.java,v 1.2 2004/02/28 09:20:51 epr Exp $
 */
package org.jnode.wt.components;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Rectangle;
import java.util.Iterator;
import java.util.LinkedList;

import org.jnode.wt.decorators.BorderDecorator;
import org.jnode.wt.events.JNodeKeyEvent;
import org.jnode.wt.events.JNodeMouseEvent;
import org.jnode.wt.layouts.JNLayoutManager;


/**
 * @author vali
 */
public class JNSimpleContainer extends JNContainer {
    private LinkedList components = new LinkedList();
    private BorderDecorator border = null;

    private JNLayoutManager layoutmanager = null;

    /*This variable is used to post mouseEntered and mouseExited events, on, child components. */
    private JNComponent currentMouseEnteredComponent = null;

    public JNComponent add(JNComponent comp) {
        return add(comp, components.size());
    }

    public JNComponent add(JNComponent comp, int index) {
        try {

            if (comp == this) {
                throw new Exception("Source And Destination Components are same");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        comp.setParent(this);
        components.add(index, comp);
        invalidate();
//		comp.recalculate();

        this.layout();
        return comp;
    }

    public void add(JNComponent comp, Object constraints) {
        this.add(comp);

        if (null != layoutmanager) {
            layoutmanager.addLayoutComponent(constraints.toString(), comp);
            this.layout();
        }
    }

    public boolean containsComponent(JNComponent c) {
        return components.contains(c);
    }

    /**
     * @return Returns the border.
     */
    public BorderDecorator getBorder() {
        return border;
    }

    public JNComponent getComponent(int n) {
        return (JNComponent) (components.get(n));
    }


        public JNComponent getComponentAt(int x, int y) {
        JNComponent returnComp = null;
        for (Iterator it = this.getComponentList().iterator(); it.hasNext();) {
            JNComponent component = (JNComponent) it.next();
            if (component.contains(x, y)) {
                if (component instanceof JNContainer) {
                    returnComp =
                            ((JNContainer) component).getComponentAt(
                                    (x - component.getLocation().x) - ((JNSimpleContainer) component).getInsets().left,
                                    (y - component.getLocation().y) - ((JNSimpleContainer) component).getInsets().top);
                }
                if (returnComp == null)
                    returnComp = component;
            }
        }
        return returnComp;
    }

    public JNComponent[] getComponents() {
        Object[] arr = this.components.toArray();

        JNComponent[] jnarr = new JNComponent[arr.length];

        for (int i = 0; i < arr.length; i++) {
            jnarr[i] = (JNComponent) arr[i];
        }

        return jnarr;


/*		synchronized (this)
		{
			int numofcomps = getComponentsCount();
		    JNComponent list[] = new JNComponent[numofcomps];
	 	    System.arraycopy(components, 0, list, 0, numofcomps);

    	    return list;
		}*/

    }


    public int getComponentCount() {
        return components.size();
    }


    public LinkedList getComponentList() {
        return this.components;
    }

    public int getIndexOf(JNComponent comp) {
        return components.indexOf(comp);
    }

    public Insets getInsets() {
        if (border != null)
            return new Insets(border.getTopDepth(), border.getLeftDepth(), border.getBottomDepth(), border.getRightDepth());
        else
//			return new Insets(0,0,0,0);
            return super.getInsets();
    }

    public JNLayoutManager getLayoutManager() {
        return this.layoutmanager;
    }

    public synchronized Dimension getMinimumSize() {
        if (layoutmanager != null)
            return layoutmanager.minimumLayoutSize(this);
        else
            return super.getMinimumSize();
    }

    public synchronized Dimension getPreferredSize() {
        if (layoutmanager != null)
            return layoutmanager.preferredLayoutSize(this);
        else
            return super.getPreferredSize();
    }

    public void recalculate() {
        this.layout();
    }

    protected void internallyPaint(Graphics g) {
        super.internallyPaint(g);
        if (border != null)
            getBorder().draw(g);
    }

    public void invalidate() {
        super.invalidate();
        for (Iterator it = components.iterator(); it.hasNext();) {
            JNComponent c = (JNComponent) it.next();
            c.invalidate();
        }
    }


    public synchronized void layout() {
        if (layoutmanager != null)
            layoutmanager.layoutContainer(this);
    }


    public void processKeyEvent(JNodeKeyEvent event) {
        for (Iterator it = components.iterator(); it.hasNext();) {
            JNComponent c = (JNComponent) it.next();

            if (!c.isVisible()) {
                continue;
            }
            c.processKeyEvent(event);
        }
    }

    /*  ???//SL
    public void processMouseMotionEvent(JNodeMouseEvent event) {
        super.processMouseMotionEvent(event);
        for (Iterator it = components.iterator(); it.hasNext();) {
            JNComponent c = (JNComponent) it.next();
            if (c.getAbsBounds().contains(event.getX(), event.getY())) {
//                c.processMouseMotionEvent(event);
                return;
            }
        }
    } */


    public void processMouseEvent(JNodeMouseEvent event) {
        for (Iterator it = components.iterator(); it.hasNext();) {
            JNComponent c = (JNComponent) it.next();

            String s = c.getName();
            if (s.equals("mainpanel")) {
                //int idd = 0;
            }
            // k
            if (!c.isVisible()) {
                continue;
            }

            if (c.getBounds().contains(event.getX(), event.getY())) {
                // Translate Event X,Y before calling
                event.translatePoint(c.getX(), c.getY());

                if (currentMouseEnteredComponent != c) {
                    if (currentMouseEnteredComponent != null) {
                        JNComponent mouseExitedComponent = currentMouseEnteredComponent;

                        // Dont fire property if the component is not visible
                        if (currentMouseEnteredComponent.isVisible()) {
                            // Fire MouseExited Event on this component
                            JNodeMouseEvent mouseExitedEvent = new JNodeMouseEvent(mouseExitedComponent, JNodeMouseEvent.MOUSE_EXITED, event.getX(), event.getY());
                            // calling the event directly is not the normal way
                            mouseExitedComponent.processMouseEvent(mouseExitedEvent);
                            //JNDesktopManager.getDesktopManager().postEvent(mouseExitedEvent);
                        }
                    }

                    currentMouseEnteredComponent = c;
                    // Fire MouseEntered Event on this component
                    JNodeMouseEvent mouseEnteredEvent = new JNodeMouseEvent(currentMouseEnteredComponent, JNodeMouseEvent.MOUSE_ENTERED, event.getX(), event.getY());
                    currentMouseEnteredComponent.processMouseEvent(mouseEnteredEvent);
                    //JNDesktopManager.getDesktopManager().postEvent(mouseEnteredEvent);

                }


                c.processMouseEvent(event);

                return;
            }
        }
    }

    public void processMouseEvent2(JNodeMouseEvent event) {
        for (Iterator it = components.iterator(); it.hasNext();) {
            JNComponent c = (JNComponent) it.next();

//			if(c.getAbsBounds().contains(event.getX(),event.getY()))
            if (c.getBounds().contains(event.getX(), event.getY())) {
                /* Translate Event X,Y before calling */
                event.translatePoint(c.getX(), c.getY());
                /*
                if(this instanceof JNWindow)
                {
                    int  ly = c.getY();// - JNWindow.TITLEBAR_HEIGHT;
                    event.translatePoint(c.getX(), ly);
                }
                else {
                    event.translatePoint(c.getX(), c.getY());
                }
                */
                c.processMouseEvent(event);
                return;
            }
        }
        // call super, to call the mouseMotionListeners.
//		super.processMouseEvent(event);
    }

    /**
     * Process a mouse motion event.
     *  kishore
     * @param event
     */
    public void processMouseMotionEvent(JNodeMouseEvent event) {
        for (Iterator it = components.iterator(); it.hasNext();) {
            JNComponent c = (JNComponent) it.next();

            if (!c.isVisible()) {
                continue;
            }

//			if(c.getAbsBounds().contains(event.getX(),event.getY()))
            if (c.getBounds().contains(event.getX(), event.getY())) {
                /* Translate Event X,Y before calling */
                event.translatePoint(c.getX(), c.getY());
                /*
                if(this instanceof JNWindow)
                {
                    int  ly = c.getY();// - JNWindow.TITLEBAR_HEIGHT;
                    event.translatePoint(c.getX(), ly);
                }
                else {
                    event.translatePoint(c.getX(), c.getY());
                }
                */

                /*c.processMouseMotionEvent(event); */
//				if(c.isVisible())
                c.processMouseMotionEvent(event);
                return;
            }
        }
        // call super, to call the mouseMotionListeners.
//		super.processMouseEvent(event);
    }
    public void remove(int i) {
        this.remove((JNComponent) components.get(i));
    }

    public void remove(JNComponent component) {
        components.remove(component);

        if (null != layoutmanager) {
            layoutmanager.removeLayoutComponent(component);
            this.layout();
        }
    }

    public void resize() {
        for (Iterator it = components.iterator(); it.hasNext();) {
            JNComponent c = (JNComponent) it.next();
            c.resize();
        }

    }

    /**
     * @param border The border to set.
     */
    public void setBorder(BorderDecorator border) {
        this.border = border;
        if (border != null) {
            border.setParent(this);
        }
    }



    public void setLayout(JNLayoutManager lm) {
        this.layoutmanager = lm;
    }

    public void setSize(Dimension size) {
        super.setSize(size);

        this.layout();
    }

    public void setVisible(boolean b) {
        super.setVisible(b);

        // also tell its children, especially Combo and menu.
        JNComponent[] comps = getComponents();

        for (int i = 0; i < comps.length; i++) {
            comps[i].setVisible(b);
        }

    }

    public void update(Graphics g) {
        super.update(g);
        final Rectangle clipBounds = g.getClipBounds();
        for (Iterator it = components.iterator(); it.hasNext();) {
            final JNComponent c = (JNComponent) it.next();
            if ((clipBounds == null) || clipBounds.intersects(c.getBounds())) {
                final Graphics gtx = g.create();
                gtx.translate(c.getX(), c.getY());
                gtx.clipRect(0, 0, c.getWidth() + 1, c.getHeight() + 1);
                c.update(gtx);
            }
        }

    }

    /*
    public void paint(Graphics g) {
                super.paint(g);
                final Rectangle clipBounds = g.getClipBounds();
                for (Iterator it = components.iterator(); it.hasNext();) {
                    final JNComponent c = (JNComponent) it.next();
                    if ((clipBounds == null) || clipBounds.intersects(c.getBounds())) {
                        final Graphics gtx = g.create();
                        gtx.translate(c.getX(), c.getY());
                        gtx.clipRect(0, 0, c.getWidth() + 1, c.getHeight() + 1);
                        c.paint(gtx);
                    }
                }

            }

      */



/*
    public void update(Graphics g) {
        super.update(g);
        for (Iterator it = components.iterator(); it.hasNext();) {
            JNComponent c = (JNComponent) it.next();
            if (c.isVisible()) {
                c.update(g);
            }

/			if(c instanceof JNLabel)
			{
				JNLabel lab = (JNLabel) c;
				System.out.print (lab.getText()+"  ");
				System.out.println(lab.getX()+" "+lab.getY()+"  "+lab.getWidth()+"  "+lab.getHeight());
			}/
        }

    }*/

    public void validate() {
        super.validate();
        for (Iterator it = components.iterator(); it.hasNext();) {
            JNComponent c = (JNComponent) it.next();
            c.validate();
        }

        // Layout all components.
        //layout();
    }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?