http://graph.netbeans.org/
y aqui puedes ver un tutorial del que me estoy basando para este blog
http://www.netbeans.org/download/flash/netbeans_60/jl_preso_vislib/player.html
El Unico JAR que necesitan es el org-netbeans-api-visual.jar que pueden bajar de
http://graph.netbeans.org/files/documents/188/1298/VisualLibrary2-dev-070205.zip
Lo que se pretende aqui es hacer una ventanita en la que se puedan agregar Widgets estos compoentes se van a poder mover en la pantalla con el mouse y se van a poder crear con tan solo dar click en la pantalla.
Con la tecla Control se van a poder conectar estos widgets entre si.
Aqui esta algo de codigo que hice. espero que les guste y que les ayude para hacer otras cosas interesantes.
Bueno aqui les va el código
package com.ernesto.ejemplo;
import java.awt.*;
import javax.swing.*;
import org.netbeans.api.visual.action.*;
import org.netbeans.api.visual.anchor.*;
import org.netbeans.api.visual.border.BorderFactory;
import org.netbeans.api.visual.widget.*;
/**
* Esta clase genera una ventana en la que se pueden meter elementos widgets con un solo click
* y luego conectarlos dejando presionada la tecla control
* @author Ernesto Maldonado Thomas
*/
public class EjemploVisualLibrary extends JFrame {
private Scene scene;
private JComponent view;
private LayerWidget mainLayer;
private LayerWidget interractionLayer;
private LayerWidget connectionLayer;
/**
* Constructor.
*/
public EjemploVisualLibrary() {
super("Primer ejemplo de Visual en Eclipse");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setExtendedState(MAXIMIZED_BOTH);
initComponentes();
}
private void initComponentes() {
scene = new Scene();
// Este componente view es la parte visual de todo esto
view = scene.createView();
setLayout(new BorderLayout());
add(view, BorderLayout.CENTER);
// Para la seleccionar o crear windgets
mainLayer = new LayerWidget(scene);
scene.addChild(mainLayer);
// Para el movimiento
interractionLayer = new LayerWidget(scene);
scene.addChild(interractionLayer);
//Para la coneccion entre widgets
connectionLayer = new LayerWidget(scene);
scene.addChild(connectionLayer);
// Para poder seleccionar o crear un widget
scene.getActions().addAction(ActionFactory.createSelectAction(new MySelectProvider()));
}
/**
* Crea un proveedor de seleccion para las acciones de seleccion de los widgets
* @author Ernesto Maldonado Thomas
*/
class MySelectProvider implements SelectProvider {
/* (non-Javadoc)
* @see org.netbeans.api.visual.action.SelectProvider#isAimingAllowed(org.netbeans.api.visual.widget.Widget, java.awt.Point, boolean)
*/
@Override
public boolean isAimingAllowed(Widget arg0, Point arg1, boolean arg2) {
return false;
}
/* (non-Javadoc)
* @see org.netbeans.api.visual.action.SelectProvider#isSelectionAllowed(org.netbeans.api.visual.widget.Widget, java.awt.Point, boolean)
*/
@Override
public boolean isSelectionAllowed(Widget arg0, Point arg1, boolean arg2) {
return true;
}
/* (non-Javadoc)
* @see org.netbeans.api.visual.action.SelectProvider#select(org.netbeans.api.visual.widget.Widget, java.awt.Point, boolean)
*/
@Override
public void select(Widget cWidget, Point p, boolean arg2) {
//Se crea un tipo de widget
LabelWidget widget = new LabelWidget(scene, "Widget");
// Se le asigna una posicion
widget.setPreferredLocation(cWidget.convertLocalToScene(p));
// Se puede decorar con algun borde
widget.setBorder(BorderFactory.createRoundedBorder(10, 5, Color.yellow, Color.blue));
//Se agrega la accion para poner conexiones
widget.getActions().addAction(ActionFactory.createExtendedConnectAction(connectionLayer, new MyConnectProvider()));
//Se agrega la accion para mover el widget en la pantalla
widget.getActions().addAction(ActionFactory.createAlignWithMoveAction(mainLayer, interractionLayer, null));
mainLayer.addChild(widget);
}
}
/**
* Crea un Proveedor de coneccion para los widgets
* @author Ernesto Maldonado Thomas
*/
class MyConnectProvider implements ConnectProvider {
/* (non-Javadoc)
* @see org.netbeans.api.visual.action.ConnectProvider#createConnection(org.netbeans.api.visual.widget.Widget, org.netbeans.api.visual.widget.Widget)
*/
@Override
public void createConnection(Widget source, Widget target) {
// Genera la conexion, para la escena
ConnectionWidget connection = new ConnectionWidget(scene);
// Se le asigna el tipo de conector final (Figura)
connection.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED);
//Se conecta al origen
connection.setSourceAnchor(AnchorFactory.createRectangularAnchor(source));
// Se conecta al destino
connection.setTargetAnchor(AnchorFactory.createRectangularAnchor(target));
//Se agrega la conexion al layer de conexion
connectionLayer.addChild(connection);
}
/* (non-Javadoc)
* @see org.netbeans.api.visual.action.ConnectProvider#hasCustomTargetWidgetResolver(org.netbeans.api.visual.widget.Scene)
*/
@Override
public boolean hasCustomTargetWidgetResolver(Scene arg0) {
return false;
}
/* (non-Javadoc)
* @see org.netbeans.api.visual.action.ConnectProvider#isSourceWidget(org.netbeans.api.visual.widget.Widget)
*/
@Override
public boolean isSourceWidget(Widget s) {
return s instanceof LabelWidget;
}
/* (non-Javadoc)
* @see org.netbeans.api.visual.action.ConnectProvider#isTargetWidget(org.netbeans.api.visual.widget.Widget, org.netbeans.api.visual.widget.Widget)
*/
@Override
public ConnectorState isTargetWidget(Widget s, Widget t) {
return s != t && t instanceof LabelWidget ? ConnectorState.ACCEPT : ConnectorState.REJECT;
}
/* (non-Javadoc)
* @see org.netbeans.api.visual.action.ConnectProvider#resolveTargetWidget(org.netbeans.api.visual.widget.Scene, java.awt.Point)
*/
@Override
public Widget resolveTargetWidget(Scene arg0, Point arg1) {
return null;
}
}
public static void main(String []args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
new EjemploVisualLibrary().setVisible(true);
}});
}
}
Espero que les guste y que les interese, si adquieren mas conocimiento y lo publican me gustaria compartirlo Muchas gracias
2 comentarios:
Que tal.. tengo una pregunta relacionada con widgets, espero me pueda ayudar.. ahi va
Estoy creando un servicio SOAP para un sistema, y necesito q brinde servicio de widgets (tal como twitter o youtube).. quisiera saber que debo usar, o si solamente el tema de widgets va de parte del cliente.. por favor una orientación, estoy desarrollando en php
Hola, ya que estas haciendo una pagia en PHP te recomiendo lo siguiente, los widgets los puedes hacer con AJAX, puedes bajarte algunas librerias como Scriptaculous que son archivos .js de java script con funciones que te pueden ayuadr con tu desarrollo.
http://script.aculo.us/
Tambien puedes usar Prototype
http://www.prototypejs.org/
y para que se vea todo bonito usa CSS te recomiendo los tutoriales en
http://www.w3.org/
http://www.w3schools.com/
Con estas herramientas veras que puedes hacer paginas muy bonitas e interactivas que ademas puedes carcar raídamente, te recomiendo usar pocas imagenes y veras resultados sorprendentes.
Saludos
Publicar un comentario