graphview.java
来自「用applet实现很多应用小程序」· Java 代码 · 共 473 行 · 第 1/2 页
JAVA
473 行
f.setFixed(false);
}
// ------------------------------------------------------------------------
// Main and demo methods
public static void main(String[] args) {
UILib.setPlatformLookAndFeel();
// create graphview
String datafile = null;
String label = "label";
if ( args.length > 1 ) {
datafile = args[0];
label = args[1];
}
JFrame frame = demo(datafile, label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static JFrame demo() {
return demo((String)null, "label");
}
public static JFrame demo(String datafile, String label) {
Graph g = null;
if ( datafile == null ) {
g = GraphLib.getGrid(15,15);
label = "label";
} else {
try {
g = new GraphMLReader().readGraph(datafile);
} catch ( Exception e ) {
e.printStackTrace();
System.exit(1);
}
}
return demo(g, label);
}
public static JFrame demo(Graph g, String label) {
final GraphView view = new GraphView(g, label);
// set up menu
JMenu dataMenu = new JMenu("Data");
dataMenu.add(new OpenGraphAction(view));
dataMenu.add(new GraphMenuAction("Grid","ctrl 1",view) {
protected Graph getGraph() {
return GraphLib.getGrid(15,15);
}
});
dataMenu.add(new GraphMenuAction("Clique","ctrl 2",view) {
protected Graph getGraph() {
return GraphLib.getClique(10);
}
});
dataMenu.add(new GraphMenuAction("Honeycomb","ctrl 3",view) {
protected Graph getGraph() {
return GraphLib.getHoneycomb(5);
}
});
dataMenu.add(new GraphMenuAction("Balanced Tree","ctrl 4",view) {
protected Graph getGraph() {
return GraphLib.getBalancedTree(3,5);
}
});
dataMenu.add(new GraphMenuAction("Diamond Tree","ctrl 5",view) {
protected Graph getGraph() {
return GraphLib.getDiamondTree(3,3,3);
}
});
JMenuBar menubar = new JMenuBar();
menubar.add(dataMenu);
// launch window
JFrame frame = new JFrame("p r e f u s e | g r a p h v i e w");
frame.setJMenuBar(menubar);
frame.setContentPane(view);
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowActivated(WindowEvent e) {
view.m_vis.run("layout");
}
public void windowDeactivated(WindowEvent e) {
view.m_vis.cancel("layout");
}
});
return frame;
}
// ------------------------------------------------------------------------
/**
* Swing menu action that loads a graph into the graph viewer.
*/
public abstract static class GraphMenuAction extends AbstractAction {
private GraphView m_view;
public GraphMenuAction(String name, String accel, GraphView view) {
m_view = view;
this.putValue(AbstractAction.NAME, name);
this.putValue(AbstractAction.ACCELERATOR_KEY,
KeyStroke.getKeyStroke(accel));
}
public void actionPerformed(ActionEvent e) {
m_view.setGraph(getGraph(), "label");
}
protected abstract Graph getGraph();
}
public static class OpenGraphAction extends AbstractAction {
private GraphView m_view;
public OpenGraphAction(GraphView view) {
m_view = view;
this.putValue(AbstractAction.NAME, "Open File...");
this.putValue(AbstractAction.ACCELERATOR_KEY,
KeyStroke.getKeyStroke("ctrl O"));
}
public void actionPerformed(ActionEvent e) {
Graph g = IOLib.getGraphFile(m_view);
if ( g == null ) return;
String label = getLabel(m_view, g);
if ( label != null ) {
m_view.setGraph(g, label);
}
}
public static String getLabel(Component c, Graph g) {
// get the column names
Table t = g.getNodeTable();
int cc = t.getColumnCount();
String[] names = new String[cc];
for ( int i=0; i<cc; ++i )
names[i] = t.getColumnName(i);
// where to store the result
final String[] label = new String[1];
// -- build the dialog -----
// we need to get the enclosing frame first
while ( c != null && !(c instanceof JFrame) ) {
c = c.getParent();
}
final JDialog dialog = new JDialog(
(JFrame)c, "Choose Label Field", true);
// create the ok/cancel buttons
final JButton ok = new JButton("OK");
ok.setEnabled(false);
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
}
});
JButton cancel = new JButton("Cancel");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label[0] = null;
dialog.setVisible(false);
}
});
// build the selection list
final JList list = new JList(names);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
int sel = list.getSelectedIndex();
if ( sel >= 0 ) {
ok.setEnabled(true);
label[0] = (String)list.getModel().getElementAt(sel);
} else {
ok.setEnabled(false);
label[0] = null;
}
}
});
JScrollPane scrollList = new JScrollPane(list);
JLabel title = new JLabel("Choose a field to use for node labels:");
// layout the buttons
Box bbox = new Box(BoxLayout.X_AXIS);
bbox.add(Box.createHorizontalStrut(5));
bbox.add(Box.createHorizontalGlue());
bbox.add(ok);
bbox.add(Box.createHorizontalStrut(5));
bbox.add(cancel);
bbox.add(Box.createHorizontalStrut(5));
// put everything into a panel
JPanel panel = new JPanel(new BorderLayout());
panel.add(title, BorderLayout.NORTH);
panel.add(scrollList, BorderLayout.CENTER);
panel.add(bbox, BorderLayout.SOUTH);
panel.setBorder(BorderFactory.createEmptyBorder(5,2,2,2));
// show the dialog
dialog.setContentPane(panel);
dialog.pack();
dialog.setLocationRelativeTo(c);
dialog.setVisible(true);
dialog.dispose();
// return the label field selection
return label[0];
}
}
public static class FitOverviewListener implements ItemBoundsListener {
private Rectangle2D m_bounds = new Rectangle2D.Double();
private Rectangle2D m_temp = new Rectangle2D.Double();
private double m_d = 15;
public void itemBoundsChanged(Display d) {
d.getItemBounds(m_temp);
GraphicsLib.expand(m_temp, 25/d.getScale());
double dd = m_d/d.getScale();
double xd = Math.abs(m_temp.getMinX()-m_bounds.getMinX());
double yd = Math.abs(m_temp.getMinY()-m_bounds.getMinY());
double wd = Math.abs(m_temp.getWidth()-m_bounds.getWidth());
double hd = Math.abs(m_temp.getHeight()-m_bounds.getHeight());
if ( xd>dd || yd>dd || wd>dd || hd>dd ) {
m_bounds.setFrame(m_temp);
DisplayLib.fitViewToBounds(d, m_bounds, 0);
}
}
}
} // end of class GraphView
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?