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