jnlayeredcontainer.java

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

JAVA
188
字号
package org.jnode.wt.components;

import org.jnode.wt.components.JNWindow;
import org.jnode.wt.components.JNComponent;
import org.jnode.wt.components.JNContainer;

import java.awt.Graphics;
import java.awt.Dimension;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import java.util.Collection;

/**
 * @author vali
 */
public class JNLayeredContainer extends JNContainer {

    public static final Integer DEFAULT_LAYER = new Integer(1000);

    public static final Integer MENU_COMBO_LAYER = new Integer(1005);

    protected final Map containers = new TreeMap();

    public JNLayeredContainer() {
        super();
        addLayer(DEFAULT_LAYER);
    }


    public void add(JNComponent comp) {
        add(comp, DEFAULT_LAYER);
    }

    /**
     * Add the given component to the given layer.
     * @param comp
     * @param layer
     */
    public void add(JNComponent comp, Integer layer) {
        JNSimpleContainer container = (JNSimpleContainer) containers.get(layer);
        if (container == null) {
            container = addLayer(layer);
        }
        container.add(comp);
    }

    /**
     * Add a layer.
     *
     * @param layer
     * @return
     */
    public JNSimpleContainer addLayer(Integer layer) {
        JNSimpleContainer container = new JNSimpleContainer();
        container.setParent(this);
        container.setLocation(0, 0);
        container.setSize(this.getSize());
        this.containers.put(layer, container);
        return container;
    }


    /**
     * @see org.jnode.wt.components.JNContainer#getComponentAt(int, int)
     */
    public JNComponent getComponentAt(int x, int y) {
        for (Iterator it = containers.keySet().iterator(); it.hasNext();) {
            JNSimpleContainer c = (JNSimpleContainer) containers.get(it.next());
            JNComponent returnComp = c.getComponentAt(x, y);
            if (returnComp != null && returnComp != c)
                return returnComp;
        }
        return null;
    }

    /**
     * Gets the layer on which the given component is placed.
     *
     * @param comp
     * @return The layer number, or null if not found.
     */
    public Integer getLayer(JNComponent comp) {
        for (Iterator it = containers.keySet().iterator(); it.hasNext();) {
            Integer layer = (Integer) it.next();
            JNSimpleContainer c = (JNSimpleContainer) containers.get(layer);
            if (c.containsComponent(comp))
                return layer;
        }
        return null;
    }

    public int getWindowsCount() {
        int count = 0;
        for (Iterator iter = this.containers.values().iterator(); iter.hasNext();) {
            JNSimpleContainer container = (JNSimpleContainer) iter.next();
            for (Iterator iterator = container.getComponentList().iterator(); iterator.hasNext();) {
                JNComponent window = (JNComponent) iterator.next();
                if (window instanceof JNWindow) {
                    count++;
                }
            }
        }
        return count;
    }

    public void invalidate() {
        for (Iterator it = containers.keySet().iterator(); it.hasNext();) {
            JNSimpleContainer c = (JNSimpleContainer) containers.get(it.next());
            c.invalidate();
        }
    }

    /**
     * Move the given component to the given layer.
     *
     * @param comp
     * @param layer
     */
    public void moveToLayer(JNComponent comp, Integer layer) {
        Integer oldLayer = getLayer(comp);
        if (oldLayer != null) {
            remove(comp, oldLayer);
        }
        this.add(comp, layer);
    }


    public void recalculate() {
        for (Iterator it = containers.keySet().iterator(); it.hasNext();) {
            JNSimpleContainer c = (JNSimpleContainer) containers.get(it.next());
            c.setSize(getSize());
        }
    }

    public void remove(JNComponent comp, Integer layer) {
        ((JNSimpleContainer) containers.get(layer)).remove(comp);
    }

    public void resize() {
        for (Iterator it = containers.keySet().iterator(); it.hasNext();) {
            JNSimpleContainer c = (JNSimpleContainer) containers.get(it.next());
            c.resize();
        }

    }

    /**
     * Update all layers.
     * @see org.jnode.wt.components.JNComponent#update(java.awt.Graphics)
     */
    public void update(Graphics g) {
        super.update(g);
        for (Iterator it = containers.keySet().iterator(); it.hasNext();) {
            JNSimpleContainer c = (JNSimpleContainer) containers.get(it.next());
            c.update(g);
        }
    }


    public void validate() {
        super.validate();
        for (Iterator it = containers.keySet().iterator(); it.hasNext();) {
            JNSimpleContainer c = (JNSimpleContainer) containers.get(it.next());
            c.validate();
        }
    }


    public JNSimpleContainer getLayer(Integer layer) {
        return (JNSimpleContainer) containers.get(layer);

    }

    protected Dimension calculatePreferredSize() {
        return new Dimension();
    }

    /**
     * @return Collection
     */
    public Collection getLayers() {
        return containers.values();
    }


}

⌨️ 快捷键说明

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