Я пытаюсь установить стиль ячейки для графика, созданного с помощью JgraphT и отображаемого с помощью JGraphX.Мне удалось успешно установить стиль ячейки для графика, созданного непосредственно в JGraphX.Вот код:
import javax.swing.JFrame;
import java.util.Hashtable;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.view.mxGraph;
import com.mxgraph.view.mxStylesheet;
import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
import com.mxgraph.util.mxConstants;
public class HelloWorld extends JFrame
{
public HelloWorld()
{
super("Hello world!");
mxGraph graph = new mxGraph();
Object parent = graph.getDefaultParent();
mxStylesheet stylesheet = graph.getStylesheet();
Hashtable<String, Object> style = new Hashtable<>();
style.put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_RECTANGLE);
style.put(mxConstants.STYLE_FONTCOLOR, "#774400");
style.put(mxConstants.STYLE_FILLCOLOR, "#FFFFFF");
style.put(mxConstants.STYLE_STROKECOLOR, "#000000");
//style.put(mxConstants.STYLE_ROUNDED, "true");
stylesheet.putCellStyle("ROUNDED", style);
graph.getModel().beginUpdate();
try
{
Object v1 = graph.insertVertex(parent, null, "Hello", 20, 20, 100, 40, "ROUNDED");
Object v2 = graph.insertVertex(parent, null, "world", 240, 150, 100, 40, "ROUNDED");
Object v3 = graph.insertVertex(parent, null, "blargh", 240, 150, 100, 40, "ROUNDED");
graph.insertEdge(parent, null, "Edge", v1, v2);
graph.insertEdge(parent, null, "Edge", v1, v3);
}
finally
{
graph.getModel().endUpdate();
}
new mxHierarchicalLayout(graph).execute(graph.getDefaultParent());
mxGraphComponent graphComponent = new mxGraphComponent(graph);
getContentPane().add(graphComponent);
}
public static void main (String[] args)
{
HelloWorld frame = new HelloWorld();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 320);
frame.setVisible(true);
}
}
Выше приведенные ячейки белого прямоугольника с черным текстом.Теперь я пытаюсь сделать то же самое для графика, созданного с помощью JgraphT и отображенного с помощью JGraphX.Только стиль ячейки, черный текст на синем фоне, все еще остается стилем JGraphX по умолчанию.Вот код:
import javax.swing.JFrame;
import java.util.*;
import org.jgrapht.*;
import org.jgrapht.graph.*;
import org.jgrapht.io.*;
import org.jgrapht.ext.*;
import org.jgrapht.traverse.*;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.view.mxGraph;
import com.mxgraph.view.mxStylesheet;
import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
import com.mxgraph.util.mxConstants;
import com.mxgraph.model.*;
public class HelloWorld extends JFrame
{
private JGraphXAdapter<String, DefaultEdge> jgxAdapter;
public HelloWorld()
{
super("Hello world!");
Graph<String, DefaultEdge> graph =
new DefaultDirectedGraph<>(DefaultEdge.class);
graph.addVertex("hello");
graph.addVertex("world");
graph.addVertex("blarg");
graph.addEdge("hello", "world");
graph.addEdge("hello", "blarg");
jgxAdapter = new JGraphXAdapter(graph);
mxStylesheet stylesheet = jgxAdapter.getStylesheet();
Hashtable<String, Object> style = new Hashtable<>();
style.put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_RECTANGLE);
style.put(mxConstants.STYLE_FONTCOLOR, "#774400");
style.put(mxConstants.STYLE_FILLCOLOR, "#FFFFFF");
style.put(mxConstants.STYLE_STROKECOLOR, "#000000");
stylesheet.putCellStyle("ROUNDED", style);
new mxHierarchicalLayout(jgxAdapter).execute(jgxAdapter.getDefaultParent());
jgxAdapter.getModel().beginUpdate();
try
{
HashMap<String, mxICell> cells = jgxAdapter.getVertexToCellMap();
for(mxICell cell : cells.values())
{
cell.setStyle("strokeColor=red;fillColor=white;");
}
}
finally
{
jgxAdapter.getModel().endUpdate();
}
mxGraphComponent graphComponent = new mxGraphComponent(jgxAdapter);
getContentPane().add(graphComponent);
}
public static void main (String[] args)
{
HelloWorld frame = new HelloWorld();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 320);
frame.setVisible(true);
}
}