Agrandir une cellule

monpseudonom Messages postés 38 Date d'inscription jeudi 21 février 2008 Statut Membre Dernière intervention 24 février 2010 - 28 mars 2008 à 23:32
 Utilisateur anonyme - 29 mars 2008 à 10:07
Salut.
J'utilise JGraph pour representer des graphes.
J'ai 3 classes qui sont :
1)HelloWorld:
public class HelloWorld {
public static void main(String[] args) {
GraphModel model = new DefaultGraphModel();
GraphLayoutCache view = new GraphLayoutCache(model,
new
DefaultCellViewFactory());
JGraph graph = new JGraph(model, view);
graph.getGraphLayoutCache().setFactory(new DefaultCellViewFactory() {
 // CellViews for each type of cell
      protected VertexView createVertexView(Object cell) {
   if (cell instanceof MyCell)
     return new JGraphEllipseView(cell);
   return new VertexView(cell);
      }
 });
 
graph.getGraphLayoutCache().insert(new MyCell(new JGraphEllipseView()));
JFrame frame = new JFrame();
frame.getContentPane().add(new JScrollPane(graph));
frame.pack();
frame.setVisible(true);
}
}
 

2)MyCell:
public class MyCell extends DefaultGraphCell
{
  public MyCell(Object userObject) {
    super(userObject);
    //getAttributes().applyMap(createCellAttributes(point));
  }
   public Map createCellAttributes(Point2D point, Integer w, Integer h, ImageIcon icon) {
     Map map = new Hashtable();
     GraphConstants.setResize(map,false);
     GraphConstants.setAutoSize(map,false);
     // Add a Bounds Attribute to the Map
     GraphConstants.setBounds(map, new Rectangle2D.Double(point.getX(), point.getY(),0,0));
     GraphConstants.setVerticalTextPosition(map, SwingConstants.TOP);
     //GraphConstants.setFont(map, new Font("Dialog", Font.PLAIN, 10));
     GraphConstants.setLineWidth(map, 2.0f);
     GraphConstants.setOpaque(map,false);
     GraphConstants.setBorder(map, BorderFactory.createTitledBorder("smAA"));
     return map;
    }}
 
3)JGraphEllipseView:
public class JGraphEllipseView extends VertexView {
 /**
  */
 public static transient JGraphEllipseRenderer renderer = new JGraphEllipseRenderer();
 /**
  */
 public JGraphEllipseView() {
  super();
 }
 /**
  */
 public JGraphEllipseView(Object cell) {
  super(cell);
 }
 /**
  * Returns the intersection of the bounding rectangle and the
  * straight line between the source and the specified point p.
  * The specified point is expected not to intersect the bounds.
  */
 public Point2D getPerimeterPoint(EdgeView edge, Point2D source, Point2D p) {
  Rectangle2D r = getBounds();
  double x = r.getX();
  double y = r.getY();
  double a = (r.getWidth() + 1) / 2;
  double b = (r.getHeight() + 1) / 2;
  // x0,y0 - center of ellipse
  double x0 = x + a;
  double y0 = y + b;
  // x1, y1 - point
  double x1 = p.getX();
  double y1 = p.getY();
  // calculate straight line equation through point and ellipse center
  // y = d * x + h
  double dx = x1 - x0;
  double dy = y1 - y0;
  if (dx == 0)
   return new Point((int) x0, (int) (y0 + b * dy / Math.abs(dy)));
  double d = dy / dx;
  double h = y0 - d * x0;
  // calculate intersection
  double e = a * a * d * d + b * b;
  double f = -2 * x0 * e;
  double g = a * a * d * d * x0 * x0 + b * b * x0 * x0 - a * a * b * b;
  double det = Math.sqrt(f * f - 4 * e * g);
  // two solutions (perimeter points)
  double xout1 = (-f + det) / (2 * e);
  double xout2 = (-f - det) / (2 * e);
  double yout1 = d * xout1 + h;
  double yout2 = d * xout2 + h;
  double dist1Squared = Math.pow((xout1 - x1), 2)
    + Math.pow((yout1 - y1), 2);
  double dist2Squared = Math.pow((xout2 - x1), 2)
    + Math.pow((yout2 - y1), 2);
  // correct solution
  double xout, yout;
  if (dist1Squared < dist2Squared) {
   xout = xout1;
   yout = yout1;
  } else {
   xout = xout2;
   yout = yout2;
  }
  return getAttributes().createPoint(xout, yout);
 }
 /**
  */
       
 public CellViewRenderer getRenderer() {
  return renderer;
 }
 /**
  */
 public static class JGraphEllipseRenderer extends VertexRenderer {
  /**
   * Return a slightly larger preferred size than for a rectangle.
   */
  public Dimension getPreferredSize() {
   Dimension d = super.getPreferredSize();
   d.width += d.width / 8;
   d.height += d.height / 2;
   return d;
  }
  /**
   */
  public void paint(Graphics g) {
   int b = borderWidth;
   Graphics2D g2 = (Graphics2D) g;
   Dimension d = getSize();
   boolean tmp = selected;
   if (super.isOpaque()) {
    g.setColor(super.getBackground());
    if (gradientColor != null && !preview) {
     setOpaque(false);
     g2.setPaint(new GradientPaint(0, 0, getBackground(),
       getWidth(), getHeight(), gradientColor, true));
    }
    g.fillOval(b - 1, b - 1, d.width - b, d.height - b);
   }
   try {
    setBorder(null);
    setOpaque(false);
    selected = false;
    super.paint(g);
   } finally {
    selected = tmp;
   }
   if (bordercolor != null) {
    g.setColor(bordercolor);
    g2.setStroke(new BasicStroke(b));
    g.drawOval(b - 1, b - 1, d.width - b, d.height - b);
   }
  
    g2.setStroke(GraphConstants.SELECTION_STROKE);
    g.setColor(highlightColor);
                                g.setColor(Color.blue);
    g.drawOval(b - 1, b - 1, d.width - b, d.height - b);
  
  }
 
 }
}

Ces trois classes sont utilisés our dessiner un cecle.
Le probleme est que ce cercle s'affiche avec une petite taille.Comment je fais pour qu'elle s'affiche directement avec une taille de ma choix(plus grande)
Merci pour votre aide

1 réponse

Utilisateur anonyme
29 mars 2008 à 10:07
C'est ça que tu dois modifier :
g.drawOval(b - 1, b - 1, d.width - b, d.height - b);

Tu utilises du code que tu ne comprends même pas apparemment. Voici ce que dit la documentation Java :
abstract  void
drawOval(int x,
         int y,
         int width,
         int height)


          Draws the outline of an oval.

Maintenant, modifie les paramètres passés à la méthode drawOval en fonction de ce que tu veux obtenir.

TUER : http://tuer.tuxfamily.org/tuer.php

yeah! vive java
0
Rejoignez-nous