# Code mit Frame in Applet umwandeln?



## Picknicker (15. Jul 2004)

Hallo,

ich habe mich etwas mit dem *JGraph* beschäftigt um einen Graphen zu zeichnen.
Bisher habe ich den Code wie unten (und unter: http://www.jgraph.com/getstarted.html ) nur als Frame zum Laufen gebracht.

Was muss ich tun um den Code so umzubauen um ein Applet daraus zu machen?

Geht das einfach durch init() und paint(), aber wie und was muss ich dann zeichnen? Wie bekomm ich die zwei Vertex und die Edge auf das Applet?


```
import org.jgraph.JGraph;
import org.jgraph.graph.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.BorderFactory;
import java.util.Hashtable;
import java.awt.Rectangle;
import java.awt.Color;
import java.util.Map;

public class HelloWorld {

  public static void main(String[] args) {

    // Construct Model and Graph
    //
    GraphModel model = new DefaultGraphModel();
    JGraph graph = new JGraph(model);
    graph.setSelectNewCells(true);

    // Create Nested Map (from Cells to Attributes)
    //
    Map attributes = new Hashtable();

    // Create Hello Vertex
    //
    DefaultGraphCell hello = new DefaultGraphCell("Hello");
    
    // Create Hello Vertex Attributes
    //
    AttributeMap helloAttrib = model.createAttributes();
    attributes.put(hello, helloAttrib);
    // Set bounds
    Rectangle helloBounds = new Rectangle(20, 20, 40, 20);
    GraphConstants.setBounds(helloAttrib, helloBounds);
    // Set black border
    GraphConstants.setBorderColor(helloAttrib, Color.black);

    // Add a Port
    //
    DefaultPort hp = new DefaultPort();
    hello.add(hp);

    // Create World Vertex
    //
    DefaultGraphCell world = new DefaultGraphCell("World");

    // Create World Vertex Attributes
    //
    AttributeMap worldAttrib = model.createAttributes();
    attributes.put(world, worldAttrib);
    // Set bounds
    Rectangle worldBounds= new Rectangle(140, 140, 40, 20);
    GraphConstants.setBounds(worldAttrib , worldBounds);
    // Set fill color
    GraphConstants.setBackground(worldAttrib, Color.orange);
    GraphConstants.setOpaque(worldAttrib, true);
    // Set raised border
    GraphConstants.setBorder(worldAttrib, 
           BorderFactory.createRaisedBevelBorder());

    // Add a Port
    //
    DefaultPort wp = new DefaultPort();
    world.add(wp);

    // Create Edge
    //
    DefaultEdge edge = new DefaultEdge();
    
    // Create Edge Attributes
    //
    AttributeMap edgeAttrib = model.createAttributes();
    attributes.put(edge, edgeAttrib);
    // Set Arrow
    int arrow = GraphConstants.ARROW_CLASSIC;
    GraphConstants.setLineEnd(edgeAttrib , arrow);
    GraphConstants.setEndFill(edgeAttrib, true);

    // Connect Edge
    //
    ConnectionSet cs = new ConnectionSet(edge, hp, wp);
    Object[] cells = new Object[]{edge, hello, world};

    // Insert into Model
    //
    model.insert(cells, attributes, cs, null, null);

    // Show in Frame
    //
    JFrame frame = new JFrame();
    frame.getContentPane().add(new JScrollPane(graph));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }

}
```

Danke und Gruß  :roll:


----------



## L-ectron-X (16. Jul 2004)

Muss das Programm direkt als Applet innerhalb der Webseite ausgeführt werden, oder kann es sich auch in einem JFrame öffnen, der vom Applet aufgerufen wurde?


----------



## Picknicker (19. Jul 2004)

Der Code soll über den Browser aufgerufen und dargestellt werden!
Kein lästiges aufrufen über die Konsole o.ä.!!   

Was meintest Du mit: "oder kann es sich auch in einem JFrame öffnen, der vom Applet aufgerufen wurde?"

Danke


----------



## L-ectron-X (19. Jul 2004)

Wenn Du den JFrame nicht von der Console aus aufrufen möchtest, kannst Du auch eine ausführbare jar-Datei erzeugen, die einfach per Doppelklick geöffnet werden kann. Wobei das aber in diesem Fall vielleicht nicht funktionieren wird (_java -cp jgraph.jar;. HelloWorld_). Für diesen Aufruf kannst Du aber eine Batch-Datei schreiben, die auch per Doppelklick den JFrame öffnen kann.
Oder Du schreibst ein Applet, welches nur eine Aufgabe hat: Diesen JFrame zu öffnen.
Ansonsten muss das gesamte Programm umgestellt werden.


----------



## Picknicker (19. Jul 2004)

Läuft dann der Frame im Applet oder öffnet das Applet nur den Frame?

Was müßte ich tun um den Code auf ein Applet umzustellen? 
Dann benutze ich ja die init() und evtl. auch die paint()-Methoden, oder!?


----------



## L-ectron-X (19. Jul 2004)

Picknicker hat gesagt.:
			
		

> Läuft dann der Frame im Applet oder öffnet das Applet nur den Frame?


Das Applet würde nur den Frame öffnen und anzeigen. Ich weiß aber nicht, ob es das ist was Du letztendlich willst.


			
				Picknicker hat gesagt.:
			
		

> Was müßte ich tun um den Code auf ein Applet umzustellen?
> Dann benutze ich ja die init() und evtl. auch die paint()-Methoden, oder!?


Genau. Es ist so wie Du sagst.


----------

