From: <had...@us...> - 2008-08-08 15:53:17
|
Revision: 3743 http://fudaa.svn.sourceforge.net/fudaa/?rev=3743&view=rev Author: hadouxad Date: 2008-08-08 15:53:20 +0000 (Fri, 08 Aug 2008) Log Message: ----------- - changement des noms de variables et ajout de fonctions pour EbliNode - ajout de la classe EbliWidgetActionAlign dans org.fudaa.ebli.visuallibrary.actions qui permet de faire des align: - a gauche - a droite - en haut - en bas - centr?\195?\169 horizontal - centr?\195?\169 vertical (on pourra donc combiner pour faire des trucs exotiques: en diagonale bas...) Exemple: pour centrer dans les 2 directions, on combine centre horizontal et centre vertical - gestion du listener d ecoute du tree en cas de suppression de widget: - Fonction de suppression de la widget par clic droit ( on pourra rajouter un key event du style touche suppr...) - fais appel a removeNode() de GraphScene ( non surcharg?\195?\169) mais qui fait appel a detachNodeWidget (node, widget) ( celle la surcharg?\195?\169e) qui fait un notify aux listener de la scene pour indiquer que le noeud a ?\195?\169t?\195?\169 supprim?\195?\169 Modified Paths: -------------- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliNode.java branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliNodeDefault.java branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliScene.java branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliWidget.java branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/graphe/EbliWidgetGraphe.java branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/tree/EbliCheckBoxNodeEditor.java branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/tree/EbliWidgetJXTreeModel.java branches/Prepro-0.92-SNAPSHOT/ebli/test/org/fudaa/ebli/all/TestGraphe2.java Added Paths: ----------- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/actions/ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/actions/EbliWidgetActionAlign.java Modified: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliNode.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliNode.java 2008-08-08 15:20:32 UTC (rev 3742) +++ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliNode.java 2008-08-08 15:53:20 UTC (rev 3743) @@ -9,13 +9,29 @@ EbliWidgetCreator getCreator(); - Dimension getPreferedDimension(); + void setPreferedSize(Dimension d); + + + Dimension getPreferedSize(); EbliNode duplicate(Map options); - Point getLocation(); + void setPreferedLocation(Point p); + Point getPreferedLocation(); + public String toString(); + /** + * Methode qui verifie que le node a une widget + * @return + */ + public boolean hasWidget(); + /** + * Methode qui verifie que le node est movable + * @return + */ + public boolean isMovable(); + } Modified: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliNodeDefault.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliNodeDefault.java 2008-08-08 15:20:32 UTC (rev 3742) +++ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliNodeDefault.java 2008-08-08 15:53:20 UTC (rev 3743) @@ -33,15 +33,15 @@ public void setPreferedLocation(Point p) { this.preferedLocation = p; // repositionnement du widget si existant - if(getCreator()!=null && getCreator().getWidget()!=null) + if(hasWidget()) getCreator().getWidget().setPreferredLocation(p); } - public void setPreferedDimension(Dimension d) { + public void setPreferedSize(Dimension d) { this.preferedSize = d; // repositionnement du widget si existant - if(getCreator()!=null && getCreator().getWidget()!=null) + if(hasWidget()) getCreator().getWidget().setPreferredSize(d); } @@ -55,12 +55,14 @@ return creator; } - public Point getLocation() { + public Point getPreferedLocation() { + return preferedLocation; } - public Dimension getPreferedDimension() { + public Dimension getPreferedSize() { // TODO Auto-generated method stub + return preferedSize; } @@ -71,5 +73,19 @@ + public boolean hasWidget() { + return (getCreator()!=null && getCreator().getWidget()!=null); + + } + + + public boolean isMovable() { + // TODO Auto-generated method stub + return (hasWidget() && getPreferedLocation() !=null && getPreferedSize() !=null); + } + + + + } Modified: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliScene.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliScene.java 2008-08-08 15:20:32 UTC (rev 3742) +++ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliScene.java 2008-08-08 15:53:20 UTC (rev 3743) @@ -30,7 +30,15 @@ */ private LayerWidget visu_; - private LayerWidget interactionLayer_; + public LayerWidget getVisu_() { + return visu_; +} + +public void setVisu_(LayerWidget visu_) { + this.visu_ = visu_; +} + +private LayerWidget interactionLayer_; final private WidgetAction alignWithMoveAction; /** @@ -95,15 +103,37 @@ EbliWidget res = node.getCreator().create(this); // -- remplissage des proprietes - res.setPreferredLocation(node.getLocation()); - if (node.getPreferedDimension() != null) - res.setPreferredSize(node.getPreferedDimension()); + res.setPreferredLocation(node.getPreferedLocation()); + if (node.getPreferedSize() != null) + res.setPreferredSize(node.getPreferedSize()); // -- ajout dans la vue layer --// visu_.addChild(res); return res; } + + + /** + * Called by the removeNode method to notify that a node is removed from the graph model. + * The default implementation removes the node widget from its parent widget. + * @param node the removed node + * @param widget the removed node widget; null if the node is non-visual + * + * Surcharge pour faire appel au notify des listener et ainsi mettre ajour les listener + */ + protected void detachNodeWidget (EbliNode node, Widget widget) { + //-- indique la suppresion du node chez le parent + notifyAllListenerNodeRemoved(node); + + if (widget != null) + widget.removeFromParent (); + + + } + + + public LayerWidget getLayerVisu() { return visu_; @@ -190,4 +220,15 @@ })); } + + /** + * Methode qui permet de raffraichir les elements de la scene + */ + public void refresh(){ + revalidate(); + this.repaint(); + getView().repaint(); + + } + } Modified: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliWidget.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliWidget.java 2008-08-08 15:20:32 UTC (rev 3742) +++ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/EbliWidget.java 2008-08-08 15:53:20 UTC (rev 3743) @@ -96,17 +96,17 @@ public void actionPerformed(ActionEvent e) { - // EbliWidget.this.setVisible(false); + EbliNode n = (EbliNode) EbliWidget.this.getEbliScene().findObject(EbliWidget.this); EbliWidget.this.getEbliScene().removeNode(n); - EbliWidget.this.getEbliScene().getLayerVisu().removeChild(EbliWidget.this); + } }); JMenuItem menuItem3 = _popup.add("Masquer l'objet"); - menuItem3.setIcon(CtuluResource.CTULU.getIcon("crystal_non")); + menuItem3.setIcon(CtuluResource.CTULU.getIcon("crystal22_visibilite")); menuItem3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Added: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/actions/EbliWidgetActionAlign.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/actions/EbliWidgetActionAlign.java (rev 0) +++ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/actions/EbliWidgetActionAlign.java 2008-08-08 15:53:20 UTC (rev 3743) @@ -0,0 +1,149 @@ +package org.fudaa.ebli.visuallibrary.actions; + +import java.awt.Dimension; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.beans.PropertyChangeListener; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import javax.swing.AbstractAction; + +import org.fudaa.ebli.visuallibrary.EbliNode; +import org.fudaa.ebli.visuallibrary.EbliNodeDefault; +import org.fudaa.ebli.visuallibrary.EbliScene; +import org.fudaa.ebli.visuallibrary.graphe.EbliWidgetCreatorGraphe; + +/** + * Action qui permet de realiser l alignement des composants. + * + * + *ATTTENTION CHOIX DE CONCEPTION: + *il faut que les EbliNode soit movables (isMovable()== true) + * pour pouvoir les aligner + * il faut donc lorss de la creation des nodes remplir les infos dimensions et size comme suit: + * + * EbliNodeDefault node = new EbliNodeDefault(); + * node.setCreator(new EbliWidgetCreatorGraphe(g)); + * node.setTitle("Graphe"); + * node.setPreferedSize(new Dimension(300, 300)); + * node.setPreferedLocation(new Point(4, 4)); + * scene.addNode(node); + * + *@author Adrien Hadoux + * + */ +public class EbliWidgetActionAlign extends AbstractAction { + + /** + * + */ + private static final long serialVersionUID = 1L; + EbliScene scene_; + public final static int ALIGNLEFT=0; + public final static int ALIGNRIGHT=1; + public final static int ALIGNCENTERHORIZONTAL=2; + public final static int ALIGNCENTERVERTICAL=3; + public final static int ALIGNTOP=4; + public final static int ALIGNBOTTOM=5; + + int typeAlignement_; + + //liste des positions precedentes pour chaque widgets + List<Point> listPreviousPositions_; + + + public EbliWidgetActionAlign(EbliScene _scene, int _typeAlignement) { + super(); + // TODO Auto-generated constructor stub + scene_=_scene; + typeAlignement_=_typeAlignement; + //-- renseignements des infos complementaires --// + putValue(NAME,"Alignement "+traduct(_typeAlignement)); + + + } + + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + alignComponents(); + } + + /** + * methode qui recalcule la nouvelle position par rapport a la scene et a l alignement choisiT. + */ + private Point calculeNewLocation(Point _previousLocation,Dimension _dimensionWidget,Dimension _dimensionScene){ + + + switch(typeAlignement_){ + case ALIGNLEFT: return new Point(0,_previousLocation.y); + case ALIGNRIGHT: return new Point(_dimensionScene.width-_dimensionWidget.width,_previousLocation.y); + case ALIGNCENTERHORIZONTAL: return new Point(_dimensionScene.width/2 -_dimensionWidget.width/2 ,_previousLocation.y); + case ALIGNCENTERVERTICAL: return new Point(_previousLocation.x,_dimensionScene.height/2 -_dimensionWidget.height/2); + case ALIGNTOP: return new Point(_previousLocation.x,0); + case ALIGNBOTTOM: return new Point(_previousLocation.x,_dimensionScene.height-_dimensionWidget.height); + + + default: return _previousLocation; + } + + + } + + + private String traduct(int _align){ + switch(typeAlignement_){ + case ALIGNLEFT: return "\xE0 gauche"; + case ALIGNRIGHT: return "\xE0 droite"; + case ALIGNCENTERHORIZONTAL: return "centr\xE9 horizontal"; + case ALIGNCENTERVERTICAL: return "centr\xE9 vertical"; + case ALIGNTOP: return "en haut"; + case ALIGNBOTTOM: return "en bas"; + + + default: return ""; + } + } + + /** + * action alignement qui realise l alignements de tous les composants + */ + public void alignComponents(){ + + //-- reinitialisation de la liste des historique des positions --// + listPreviousPositions_=new ArrayList<Point>(); + + //-- recuperation de la liste des widgets selectionnees --// + //FIXME comment recuperer les nodes uniquements selectionnes? la je recupere tout... + Set<EbliNode> listeNode = (Set<EbliNode>) scene_.getNodes(); + + //-- parcours des nodes + for(Iterator<EbliNode> it=listeNode.iterator();it.hasNext();){ + + EbliNode currentNode=it.next(); + if(currentNode!=null && currentNode.isMovable()){ + //-- enregistrement de la previous position --// + listPreviousPositions_.add(currentNode.getPreferedLocation()); + + //-- calcul de la nouvelle position du node en fonction de l alignement choisi --// + Point newLocation=calculeNewLocation(currentNode.getPreferedLocation(), currentNode.getCreator().getWidget().getPreferredSize(),scene_.getView().getSize()); + + //-- tentative de modification de la position du node --// + currentNode.setPreferedLocation(newLocation); + + currentNode.getCreator().getWidget().revalidate(); + currentNode.getCreator().getWidget().repaint(); + } + + } + //-- rafraichissement de la scene --// + scene_.refresh(); + + } + + + + +} Modified: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/graphe/EbliWidgetGraphe.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/graphe/EbliWidgetGraphe.java 2008-08-08 15:20:32 UTC (rev 3742) +++ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/graphe/EbliWidgetGraphe.java 2008-08-08 15:53:20 UTC (rev 3743) @@ -116,8 +116,8 @@ nodeLegende = new EbliNodeDefault(); nodeLegende.setCreator(new EbliWidgetCreatorLegende(getGraphe())); - nodeLegende.setP(nouvellePosition); - nodeLegende.setD(new Dimension(100, 100)); + nodeLegende.setPreferedLocation(nouvellePosition); + nodeLegende.setPreferedSize(new Dimension(100, 100)); EbliWidgetGraphe.this.getEbliScene().addNode(nodeLegende); //widgetLegende=WidgetLegendeManager.createLegende(EbliWidgetGraphe.this.getGraphe(), EbliWidgetGraphe.this.getScene_(),nouvellePosition); Modified: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/tree/EbliCheckBoxNodeEditor.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/tree/EbliCheckBoxNodeEditor.java 2008-08-08 15:20:32 UTC (rev 3742) +++ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/tree/EbliCheckBoxNodeEditor.java 2008-08-08 15:53:20 UTC (rev 3743) @@ -86,7 +86,7 @@ // -- on rend visible la widget en fonction de la checkbox node.getCreator().getWidget().setVisible(((JCheckBox) editor).isSelected()); - node.getCreator().getWidget().getEbliScene().getView().repaint(); + node.getCreator().getWidget().getEbliScene().refresh(); } }); Modified: branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/tree/EbliWidgetJXTreeModel.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/tree/EbliWidgetJXTreeModel.java 2008-08-08 15:20:32 UTC (rev 3742) +++ branches/Prepro-0.92-SNAPSHOT/ebli/src/org/fudaa/ebli/visuallibrary/tree/EbliWidgetJXTreeModel.java 2008-08-08 15:53:20 UTC (rev 3743) @@ -13,6 +13,7 @@ import org.fudaa.ebli.visuallibrary.EbliNode; import org.fudaa.ebli.visuallibrary.EbliNodeListener; +import org.fudaa.ebli.visuallibrary.EbliScene; /** @@ -104,9 +105,27 @@ } -public void noderemoved(EbliNode node) { +public void noderemoved(EbliNode _node) { // TODO Auto-generated method stub + //-- reconstruction des noeuds --// + nodeRoot_.removeAllChildren(); + + //-- recuperation de la scene --// + EbliScene scene=_node.getCreator().getWidget().getEbliScene(); + + //-- recuperation de la liste des nodes de scene --// + ArrayList<EbliNode> listeNodes=new ArrayList<EbliNode>(scene.getNodes()); + + for(Iterator<EbliNode> it=listeNodes.iterator();it.hasNext();){ + //-- pqr lq suite on pourra faire un test si le noeud est sous element, par exemple la legende par rapport au graphe --// + EbliNode node=it.next(); + nodeRoot_.add(new DefaultMutableTreeNode(node)); + } + + //-- rafraichissement du modele --// + modeleTree.reload(); + } Modified: branches/Prepro-0.92-SNAPSHOT/ebli/test/org/fudaa/ebli/all/TestGraphe2.java =================================================================== --- branches/Prepro-0.92-SNAPSHOT/ebli/test/org/fudaa/ebli/all/TestGraphe2.java 2008-08-08 15:20:32 UTC (rev 3742) +++ branches/Prepro-0.92-SNAPSHOT/ebli/test/org/fudaa/ebli/all/TestGraphe2.java 2008-08-08 15:53:20 UTC (rev 3743) @@ -7,16 +7,19 @@ */ package org.fudaa.ebli.all; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Point; import javax.swing.Box; +import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.JToolBar; import javax.swing.JTree; import javax.swing.WindowConstants; import javax.swing.table.DefaultTableModel; @@ -44,6 +47,7 @@ import org.fudaa.ebli.visuallibrary.EbliWidgetCreatorFleche; import org.fudaa.ebli.visuallibrary.EbliWidgetCreatorRectangle; import org.fudaa.ebli.visuallibrary.EbliWidgetDBLFleche; +import org.fudaa.ebli.visuallibrary.actions.EbliWidgetActionAlign; import org.fudaa.ebli.visuallibrary.calque.EbliWidgetCreatorVueCalque; import org.fudaa.ebli.visuallibrary.graphe.EbliWidgetCreatorGraphe; import org.fudaa.ebli.visuallibrary.graphe.EbliWidgetCreatorLegende; @@ -161,24 +165,22 @@ tree.setCellEditor(new EbliCheckBoxNodeEditor(tree)); tree.setEditable(true); - // ajout graphe - // GrapheWidget graphe=new GrapheWidget(scene,null,g); - // graphe.setPreferredSize(new Dimension(300, 300)); - // scene.addWidget(graphe); - + // -- creation d un noeud Graphe --// EbliNodeDefault node = new EbliNodeDefault(); node.setCreator(new EbliWidgetCreatorGraphe(g)); node.setTitle("Graphe"); - node.setD(new Dimension(300, 300)); - node.setP(new Point(4, 4)); + node.setPreferedSize(new Dimension(200, 250)); + node.setPreferedLocation(new Point(12, 420)); scene.addNode(node); + // -- creation d un noeud legende --// EbliNodeDefault nodeLegende = new EbliNodeDefault(); nodeLegende.setTitle("Legende"); nodeLegende.setCreator(new EbliWidgetCreatorLegende(g)); - nodeLegende.setD(new Dimension(100, 100)); + nodeLegende.setPreferedSize(new Dimension(100, 100)); + nodeLegende.setPreferedLocation(new Point(4, 270)); scene.addNode(nodeLegende); // -- creation de la vue calque @@ -189,6 +191,8 @@ vueC.setSize(new Dimension(200, 200)); node = new EbliNodeDefault(); node.setTitle("Vue Calque"); + node.setPreferedSize(new Dimension(400, 200)); + node.setPreferedLocation(new Point(250, 170)); // JFrame fr = new JFrame(); ZEbliCalquesPanel ebliCalquesPanel = new ZEbliCalquesPanel(br, new CtuluUIDefault()); @@ -205,34 +209,39 @@ EbliNodeDefault nodeRect = new EbliNodeDefault(); nodeRect.setTitle("Rectangle"); nodeRect.setCreator(new EbliWidgetCreatorRectangle("Test recangle")); - // nodeRect.setD(new Dimension(100, 100)); - nodeRect.setP(new Point(350, 125)); + nodeRect.setPreferedSize(new Dimension(200, 100)); + nodeRect.setPreferedLocation(new Point(350, 125)); scene.addNode(nodeRect); // -- ajout du fleche double sens diagonale--// node = new EbliNodeDefault(); node.setTitle("Fleche Double"); node.setCreator(new EbliWidgetCreatorDblFleche(EbliWidgetDBLFleche.ORIENTATION_DIAG1)); - node.setD(new Dimension(100, 100)); - node.setP(new Point(450, 125)); + node.setPreferedSize(new Dimension(100, 100)); + node.setPreferedLocation(new Point(450, 125)); scene.addNode(node); // -- ajout du fleche double sens nord--// node = new EbliNodeDefault(); node.setTitle("Fleche Double"); node.setCreator(new EbliWidgetCreatorDblFleche(EbliWidgetDBLFleche.ORIENTATION_WEST)); - node.setD(new Dimension(100, 100)); - node.setP(new Point(450, 125)); + node.setPreferedSize(new Dimension(100, 100)); + node.setPreferedLocation(new Point(450, 125)); scene.addNode(node); // -- ajout du fleche sens unique--// node = new EbliNodeDefault(); node.setTitle("Fleche"); node.setCreator(new EbliWidgetCreatorFleche(0)); - node.setD(new Dimension(100, 100)); - node.setP(new Point(250, 525)); + node.setPreferedSize(new Dimension(100, 100)); + node.setPreferedLocation(new Point(250, 525)); scene.addNode(node); + + //if(node.getCreator().getWidget().) + + + // WidgetLegendeManagerOLD.createWidgetLegendeGraphe(this, visu, courbe, // graphe.getClientArea()); @@ -281,8 +290,10 @@ Box boxEast = Box.createVerticalBox(); boxEast.add(new BuScrollPane(t)); p.add(new JScrollPane(boxEast), BuBorderLayout.EAST); - - f.setContentPane(p); + f.setLayout(new BorderLayout()); + + //f.setContentPane(p); + f.add(p,BorderLayout.CENTER); // fin p.add(new JScrollPane(scene.createView()), BuBorderLayout.CENTER); @@ -311,6 +322,14 @@ * scene.addNode(node); */ +JToolBar bar =new JToolBar(); +f.add(bar,BorderLayout.PAGE_START); +bar.add(new EbliWidgetActionAlign(scene, EbliWidgetActionAlign.ALIGNLEFT)); +bar.add(new EbliWidgetActionAlign(scene, EbliWidgetActionAlign.ALIGNRIGHT)); +bar.add(new EbliWidgetActionAlign(scene, EbliWidgetActionAlign.ALIGNCENTERHORIZONTAL)); +bar.add(new EbliWidgetActionAlign(scene, EbliWidgetActionAlign.ALIGNCENTERVERTICAL)); +bar.add(new EbliWidgetActionAlign(scene, EbliWidgetActionAlign.ALIGNTOP)); +bar.add(new EbliWidgetActionAlign(scene, EbliWidgetActionAlign.ALIGNBOTTOM)); p.doLayout(); } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |