home *** CD-ROM | disk | FTP | other *** search
/ Java 1.2 How-To / JavaHowTo.iso / 3rdParty / Bluette / Plastic / demo / Graph.pla < prev    next >
Text File  |  1997-10-28  |  22KB  |  2,029 lines

  1. <string>
  2. Graph Layout
  3. <string>
  4. Min-Kyu Lee
  5. <integer>
  6. 3
  7. <string>
  8. @(#)Graph.java    1.3 96/12/06
  9. <string>
  10. Copyright (c) 1994-1996 Sun Microsystems, Inc. All Rights 
  11. <string>
  12. Reserved.
  13. <string>
  14.  
  15. <string>
  16.  
  17. <integer>
  18. 3
  19. <string>
  20. java.util.*
  21. <string>
  22. java.awt.*
  23. <string>
  24. java.applet.Applet
  25. <storable>
  26. <string>
  27. TGraph
  28. <integer>
  29. 15
  30. <storable>
  31. <string>
  32. TJavaClass
  33. <integer>
  34. 22
  35. <integer>
  36. 177
  37. <integer>
  38. 132
  39. <integer>
  40. 307
  41. <string>
  42. Node
  43. <integer>
  44. 6
  45. <storable>
  46. <string>
  47. TJavaAttribute
  48. <string>
  49. x
  50. <string>
  51. double
  52. <string>
  53.  
  54. <integer>
  55. 0
  56. <boolean>
  57. FALSE
  58. <boolean>
  59. FALSE
  60. <storable>
  61. <string>
  62. TJavaAttribute
  63. <string>
  64. y
  65. <string>
  66. double
  67. <string>
  68.  
  69. <integer>
  70. 0
  71. <boolean>
  72. FALSE
  73. <boolean>
  74. FALSE
  75. <storable>
  76. <string>
  77. TJavaAttribute
  78. <string>
  79. dx
  80. <string>
  81. double
  82. <string>
  83.  
  84. <integer>
  85. 0
  86. <boolean>
  87. FALSE
  88. <boolean>
  89. FALSE
  90. <storable>
  91. <string>
  92. TJavaAttribute
  93. <string>
  94. dy
  95. <string>
  96. double
  97. <string>
  98.  
  99. <integer>
  100. 0
  101. <boolean>
  102. FALSE
  103. <boolean>
  104. FALSE
  105. <storable>
  106. <string>
  107. TJavaAttribute
  108. <string>
  109. fixed
  110. <string>
  111. boolean
  112. <string>
  113.  
  114. <integer>
  115. 0
  116. <boolean>
  117. FALSE
  118. <boolean>
  119. FALSE
  120. <storable>
  121. <string>
  122. TJavaAttribute
  123. <string>
  124. lbl
  125. <string>
  126. String
  127. <string>
  128.  
  129. <integer>
  130. 0
  131. <boolean>
  132. FALSE
  133. <boolean>
  134. FALSE
  135. <integer>
  136. 0
  137. <integer>
  138. 0
  139. <boolean>
  140. FALSE
  141. <boolean>
  142. TRUE
  143. <integer>
  144. 0
  145. <storable>
  146. <string>
  147. TJavaClass
  148. <integer>
  149. 162
  150. <integer>
  151. 177
  152. <integer>
  153. 272
  154. <integer>
  155. 257
  156. <string>
  157. Edge
  158. <integer>
  159. 3
  160. <storable>
  161. <string>
  162. TJavaAttribute
  163. <string>
  164. from
  165. <string>
  166. int
  167. <string>
  168.  
  169. <integer>
  170. 0
  171. <boolean>
  172. FALSE
  173. <boolean>
  174. FALSE
  175. <storable>
  176. <string>
  177. TJavaAttribute
  178. <string>
  179. to
  180. <string>
  181. int
  182. <string>
  183.  
  184. <integer>
  185. 0
  186. <boolean>
  187. FALSE
  188. <boolean>
  189. FALSE
  190. <storable>
  191. <string>
  192. TJavaAttribute
  193. <string>
  194. len
  195. <string>
  196. double
  197. <string>
  198.  
  199. <integer>
  200. 0
  201. <boolean>
  202. FALSE
  203. <boolean>
  204. FALSE
  205. <integer>
  206. 0
  207. <integer>
  208. 0
  209. <boolean>
  210. FALSE
  211. <boolean>
  212. TRUE
  213. <integer>
  214. 0
  215. <storable>
  216. <string>
  217. TJavaClass
  218. <integer>
  219. 302
  220. <integer>
  221. 82
  222. <integer>
  223. 412
  224. <integer>
  225. 117
  226. <string>
  227. Panel
  228. <integer>
  229. 0
  230. <integer>
  231. 0
  232. <integer>
  233. 0
  234. <boolean>
  235. FALSE
  236. <boolean>
  237. FALSE
  238. <integer>
  239. 0
  240. <storable>
  241. <string>
  242. TJavaClass
  243. <integer>
  244. 302
  245. <integer>
  246. 177
  247. <integer>
  248. 587
  249. <integer>
  250. 357
  251. <string>
  252. GraphPanel
  253. <integer>
  254. 17
  255. <storable>
  256. <string>
  257. TJavaAttribute
  258. <string>
  259. nnodes
  260. <string>
  261. int
  262. <string>
  263.  
  264. <integer>
  265. 0
  266. <boolean>
  267. FALSE
  268. <boolean>
  269. FALSE
  270. <storable>
  271. <string>
  272. TJavaAttribute
  273. <string>
  274. nedges
  275. <string>
  276. int
  277. <string>
  278.  
  279. <integer>
  280. 0
  281. <boolean>
  282. FALSE
  283. <boolean>
  284. FALSE
  285. <storable>
  286. <string>
  287. TJavaAttribute
  288. <string>
  289. stress
  290. <string>
  291. boolean
  292. <string>
  293.  
  294. <integer>
  295. 0
  296. <boolean>
  297. FALSE
  298. <boolean>
  299. FALSE
  300. <storable>
  301. <string>
  302. TJavaAttribute
  303. <string>
  304. random
  305. <string>
  306. boolean
  307. <string>
  308.  
  309. <integer>
  310. 0
  311. <boolean>
  312. FALSE
  313. <boolean>
  314. FALSE
  315. <storable>
  316. <string>
  317. TJavaAttribute
  318. <string>
  319. pick
  320. <string>
  321. Node
  322. <string>
  323.  
  324. <integer>
  325. 0
  326. <boolean>
  327. FALSE
  328. <boolean>
  329. FALSE
  330. <storable>
  331. <string>
  332. TJavaAttribute
  333. <string>
  334. pickfixed
  335. <string>
  336. boolean
  337. <string>
  338.  
  339. <integer>
  340. 0
  341. <boolean>
  342. FALSE
  343. <boolean>
  344. FALSE
  345. <storable>
  346. <string>
  347. TJavaAttribute
  348. <string>
  349. offscreen
  350. <string>
  351. Image
  352. <string>
  353.  
  354. <integer>
  355. 0
  356. <boolean>
  357. FALSE
  358. <boolean>
  359. FALSE
  360. <storable>
  361. <string>
  362. TJavaAttribute
  363. <string>
  364. offscreensize
  365. <string>
  366. Dimension
  367. <string>
  368.  
  369. <integer>
  370. 0
  371. <boolean>
  372. FALSE
  373. <boolean>
  374. FALSE
  375. <storable>
  376. <string>
  377. TJavaAttribute
  378. <string>
  379. offgraphics
  380. <string>
  381. Graphics
  382. <string>
  383.  
  384. <integer>
  385. 0
  386. <boolean>
  387. FALSE
  388. <boolean>
  389. FALSE
  390. <storable>
  391. <string>
  392. TJavaAttribute
  393. <string>
  394. fixedColor
  395. <string>
  396. Color
  397. <string>
  398. Color.red
  399. <integer>
  400. 0
  401. <boolean>
  402. TRUE
  403. <boolean>
  404. FALSE
  405. <storable>
  406. <string>
  407. TJavaAttribute
  408. <string>
  409. selectColor
  410. <string>
  411. Color
  412. <string>
  413. Color.pink
  414. <integer>
  415. 0
  416. <boolean>
  417. TRUE
  418. <boolean>
  419. FALSE
  420. <storable>
  421. <string>
  422. TJavaAttribute
  423. <string>
  424. edgeColor
  425. <string>
  426. Color
  427. <string>
  428. Color.black
  429. <integer>
  430. 0
  431. <boolean>
  432. TRUE
  433. <boolean>
  434. FALSE
  435. <storable>
  436. <string>
  437. TJavaAttribute
  438. <string>
  439. nodeColor
  440. <string>
  441. Color
  442. <string>
  443. new Color(250, 220, 100)
  444. <integer>
  445. 0
  446. <boolean>
  447. TRUE
  448. <boolean>
  449. FALSE
  450. <storable>
  451. <string>
  452. TJavaAttribute
  453. <string>
  454. stressColor
  455. <string>
  456. Color
  457. <string>
  458. Color.darkGray
  459. <integer>
  460. 0
  461. <boolean>
  462. TRUE
  463. <boolean>
  464. FALSE
  465. <storable>
  466. <string>
  467. TJavaAttribute
  468. <string>
  469. arcColor1
  470. <string>
  471. Color
  472. <string>
  473. Color.black
  474. <integer>
  475. 0
  476. <boolean>
  477. TRUE
  478. <boolean>
  479. FALSE
  480. <storable>
  481. <string>
  482. TJavaAttribute
  483. <string>
  484. arcColor2
  485. <string>
  486. Color
  487. <string>
  488. Color.pink
  489. <integer>
  490. 0
  491. <boolean>
  492. TRUE
  493. <boolean>
  494. FALSE
  495. <storable>
  496. <string>
  497. TJavaAttribute
  498. <string>
  499. arcColor3
  500. <string>
  501. Color
  502. <string>
  503. Color.red
  504. <integer>
  505. 0
  506. <boolean>
  507. TRUE
  508. <boolean>
  509. FALSE
  510. <integer>
  511. 13
  512. <storable>
  513. <string>
  514. TJavaConstructor
  515. <string>
  516.  
  517. <string>
  518.  
  519. <integer>
  520. 1
  521. <storable>
  522. <string>
  523. TJavaArgument
  524. <string>
  525. graph
  526. <string>
  527. Graph
  528. <integer>
  529. 1
  530. <string>
  531. this.graph = graph;
  532. <storable>
  533. <string>
  534. TJavaMethod
  535. <string>
  536. findNode
  537. <string>
  538. int
  539. <integer>
  540. 1
  541. <storable>
  542. <string>
  543. TJavaArgument
  544. <string>
  545. lbl
  546. <string>
  547. String
  548. <integer>
  549. 0
  550. <boolean>
  551. FALSE
  552. <boolean>
  553. FALSE
  554. <boolean>
  555. FALSE
  556. <boolean>
  557. FALSE
  558. <string>
  559.  
  560. <integer>
  561. 6
  562. <string>
  563. for (int i = 0 ; i < nnodes ; i++) {
  564. <string>
  565.     if (nodes[i].lbl.equals(lbl)) {
  566. <string>
  567.         return i;
  568. <string>
  569.     }
  570. <string>
  571. }
  572. <string>
  573. return addNode(lbl);
  574. <storable>
  575. <string>
  576. TJavaMethod
  577. <string>
  578. addNode
  579. <string>
  580. int
  581. <integer>
  582. 1
  583. <storable>
  584. <string>
  585. TJavaArgument
  586. <string>
  587. lbl
  588. <string>
  589. String
  590. <integer>
  591. 0
  592. <boolean>
  593. FALSE
  594. <boolean>
  595. FALSE
  596. <boolean>
  597. FALSE
  598. <boolean>
  599. FALSE
  600. <string>
  601.  
  602. <integer>
  603. 6
  604. <string>
  605. Node n = new Node();
  606. <string>
  607. n.x = 10 + 380*Math.random();
  608. <string>
  609. n.y = 10 + 380*Math.random();
  610. <string>
  611. n.lbl = lbl;
  612. <string>
  613. nodes[nnodes] = n;
  614. <string>
  615. return nnodes++;
  616. <storable>
  617. <string>
  618. TJavaMethod
  619. <string>
  620. addEdge
  621. <string>
  622.  
  623. <integer>
  624. 3
  625. <storable>
  626. <string>
  627. TJavaArgument
  628. <string>
  629. from
  630. <string>
  631. String
  632. <storable>
  633. <string>
  634. TJavaArgument
  635. <string>
  636. to
  637. <string>
  638. String
  639. <storable>
  640. <string>
  641. TJavaArgument
  642. <string>
  643. len
  644. <string>
  645. int
  646. <integer>
  647. 0
  648. <boolean>
  649. FALSE
  650. <boolean>
  651. FALSE
  652. <boolean>
  653. FALSE
  654. <boolean>
  655. FALSE
  656. <string>
  657.  
  658. <integer>
  659. 5
  660. <string>
  661. Edge e = new Edge();
  662. <string>
  663. e.from = findNode(from);
  664. <string>
  665. e.to = findNode(to);
  666. <string>
  667. e.len = len;
  668. <string>
  669. edges[nedges++] = e;
  670. <storable>
  671. <string>
  672. TJavaMethod
  673. <string>
  674. run
  675. <string>
  676.  
  677. <integer>
  678. 0
  679. <integer>
  680. 3
  681. <boolean>
  682. FALSE
  683. <boolean>
  684. FALSE
  685. <boolean>
  686. FALSE
  687. <boolean>
  688. FALSE
  689. <string>
  690.  
  691. <integer>
  692. 16
  693. <string>
  694. while (true) {
  695. <string>
  696.     relax();
  697. <string>
  698.     if (random && (Math.random() < 0.03)) {
  699. <string>
  700.     Node n = nodes[(int)(Math.random() * nnodes)];
  701. <string>
  702.     if (!n.fixed) {
  703. <string>
  704.         n.x += 100*Math.random() - 50;
  705. <string>
  706.         n.y += 100*Math.random() - 50;
  707. <string>
  708.     }
  709. <string>
  710.     graph.play(graph.getCodeBase(), "audio/drip.au");
  711. <string>
  712.     }
  713. <string>
  714.     try {
  715. <string>
  716.     Thread.sleep(100);
  717. <string>
  718.     } catch (InterruptedException e) {
  719. <string>
  720.     break;
  721. <string>
  722.     }
  723. <string>
  724. }
  725. <storable>
  726. <string>
  727. TJavaMethod
  728. <string>
  729. relax
  730. <string>
  731.  
  732. <integer>
  733. 0
  734. <integer>
  735. 0
  736. <boolean>
  737. FALSE
  738. <boolean>
  739. FALSE
  740. <boolean>
  741. FALSE
  742. <boolean>
  743. TRUE
  744. <string>
  745.  
  746. <integer>
  747. 66
  748. <string>
  749. for (int i = 0 ; i < nedges ; i++) {
  750. <string>
  751.     Edge e = edges[i];
  752. <string>
  753.     double vx = nodes[e.to].x - nodes[e.from].x;
  754. <string>
  755.     double vy = nodes[e.to].y - nodes[e.from].y;
  756. <string>
  757.     double len = Math.sqrt(vx * vx + vy * vy);
  758. <string>
  759.     double f = (edges[i].len - len) / (len * 3);
  760. <string>
  761.     double dx = f * vx;
  762. <string>
  763.     double dy = f * vy;
  764. <string>
  765.  
  766. <string>
  767.     nodes[e.to].dx += dx;
  768. <string>
  769.     nodes[e.to].dy += dy;
  770. <string>
  771.     nodes[e.from].dx += -dx;
  772. <string>
  773.     nodes[e.from].dy += -dy;
  774. <string>
  775. }
  776. <string>
  777.  
  778. <string>
  779. for (int i = 0 ; i < nnodes ; i++) {
  780. <string>
  781.     Node n1 = nodes[i];
  782. <string>
  783.     double dx = 0;
  784. <string>
  785.     double dy = 0;
  786. <string>
  787.  
  788. <string>
  789.     for (int j = 0 ; j < nnodes ; j++) {
  790. <string>
  791.     if (i == j) {
  792. <string>
  793.         continue;
  794. <string>
  795.     }
  796. <string>
  797.     Node n2 = nodes[j];
  798. <string>
  799.     double vx = n1.x - n2.x;
  800. <string>
  801.     double vy = n1.y - n2.y;
  802. <string>
  803.     double len = vx * vx + vy * vy;
  804. <string>
  805.     if (len == 0) {
  806. <string>
  807.         dx += Math.random();
  808. <string>
  809.         dy += Math.random();
  810. <string>
  811.     } else if (len < 100*100) {
  812. <string>
  813.         dx += vx / len;
  814. <string>
  815.         dy += vy / len;
  816. <string>
  817.     }
  818. <string>
  819.     }
  820. <string>
  821.     double dlen = dx * dx + dy * dy;
  822. <string>
  823.     if (dlen > 0) {
  824. <string>
  825.     dlen = Math.sqrt(dlen) / 2;
  826. <string>
  827.     n1.dx += dx / dlen;
  828. <string>
  829.     n1.dy += dy / dlen;
  830. <string>
  831.     }
  832. <string>
  833. }
  834. <string>
  835.  
  836. <string>
  837. Dimension d = size();
  838. <string>
  839. for (int i = 0 ; i < nnodes ; i++) {
  840. <string>
  841.     Node n = nodes[i];
  842. <string>
  843.     if (!n.fixed) {
  844. <string>
  845.     n.x += Math.max(-5, Math.min(5, n.dx));
  846. <string>
  847.     n.y += Math.max(-5, Math.min(5, n.dy));
  848. <string>
  849.         // System.out.println("v= " + n.dx + "," + n.dy);
  850. <string>
  851.     if (n.x < 0) {
  852. <string>
  853.         n.x = 0;
  854. <string>
  855.     } else if (n.x > d.width) {
  856. <string>
  857.         n.x = d.width;
  858. <string>
  859.     }
  860. <string>
  861.     if (n.y < 0) {
  862. <string>
  863.         n.y = 0;
  864. <string>
  865.     } else if (n.y > d.height) {
  866. <string>
  867.         n.y = d.height;
  868. <string>
  869.     }
  870. <string>
  871.     }
  872. <string>
  873.     n.dx /= 2;
  874. <string>
  875.     n.dy /= 2;
  876. <string>
  877. }
  878. <string>
  879. repaint();
  880. <storable>
  881. <string>
  882. TJavaMethod
  883. <string>
  884. paintNode
  885. <string>
  886.  
  887. <integer>
  888. 3
  889. <storable>
  890. <string>
  891. TJavaArgument
  892. <string>
  893. g
  894. <string>
  895. Graphics
  896. <storable>
  897. <string>
  898. TJavaArgument
  899. <string>
  900. n
  901. <string>
  902. Node
  903. <storable>
  904. <string>
  905. TJavaArgument
  906. <string>
  907. fm
  908. <string>
  909. FontMetrics
  910. <integer>
  911. 3
  912. <boolean>
  913. FALSE
  914. <boolean>
  915. FALSE
  916. <boolean>
  917. FALSE
  918. <boolean>
  919. FALSE
  920. <string>
  921.  
  922. <integer>
  923. 9
  924. <string>
  925. int x = (int)n.x;
  926. <string>
  927. int y = (int)n.y;
  928. <string>
  929. g.setColor((n == pick) ? selectColor : (n.fixed ? fixedColor : nodeColor));
  930. <string>
  931. int w = fm.stringWidth(n.lbl) + 10;
  932. <string>
  933. int h = fm.getHeight() + 4;
  934. <string>
  935. g.fillRect(x - w/2, y - h / 2, w, h);
  936. <string>
  937. g.setColor(Color.black);
  938. <string>
  939. g.drawRect(x - w/2, y - h / 2, w-1, h-1);
  940. <string>
  941. g.drawString(n.lbl, x - (w-10)/2, (y - (h-4)/2) + fm.getAscent());
  942. <storable>
  943. <string>
  944. TJavaMethod
  945. <string>
  946. update
  947. <string>
  948.  
  949. <integer>
  950. 1
  951. <storable>
  952. <string>
  953. TJavaArgument
  954. <string>
  955. g
  956. <string>
  957. Graphics
  958. <integer>
  959. 3
  960. <boolean>
  961. FALSE
  962. <boolean>
  963. FALSE
  964. <boolean>
  965. FALSE
  966. <boolean>
  967. TRUE
  968. <string>
  969.  
  970. <integer>
  971. 33
  972. <string>
  973. Dimension d = size();
  974. <string>
  975. if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) {
  976. <string>
  977.     offscreen = createImage(d.width, d.height);
  978. <string>
  979.     offscreensize = d;
  980. <string>
  981.     offgraphics = offscreen.getGraphics();
  982. <string>
  983.     offgraphics.setFont(getFont());
  984. <string>
  985. }
  986. <string>
  987.  
  988. <string>
  989. offgraphics.setColor(getBackground());
  990. <string>
  991. offgraphics.fillRect(0, 0, d.width, d.height);
  992. <string>
  993. for (int i = 0 ; i < nedges ; i++) {
  994. <string>
  995.     Edge e = edges[i];
  996. <string>
  997.     int x1 = (int)nodes[e.from].x;
  998. <string>
  999.     int y1 = (int)nodes[e.from].y;
  1000. <string>
  1001.     int x2 = (int)nodes[e.to].x;
  1002. <string>
  1003.     int y2 = (int)nodes[e.to].y;
  1004. <string>
  1005.     int len = (int)Math.abs(Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) - e.len);
  1006. <string>
  1007.     offgraphics.setColor((len < 10) ? arcColor1 : (len < 20 ? arcColor2 : arcColor3)) ;
  1008. <string>
  1009.     offgraphics.drawLine(x1, y1, x2, y2);
  1010. <string>
  1011.     if (stress) {
  1012. <string>
  1013.     String lbl = String.valueOf(len);
  1014. <string>
  1015.     offgraphics.setColor(stressColor);
  1016. <string>
  1017.     offgraphics.drawString(lbl, x1 + (x2-x1)/2, y1 + (y2-y1)/2);
  1018. <string>
  1019.     offgraphics.setColor(edgeColor);
  1020. <string>
  1021.     }
  1022. <string>
  1023. }
  1024. <string>
  1025.  
  1026. <string>
  1027. FontMetrics fm = offgraphics.getFontMetrics();
  1028. <string>
  1029. for (int i = 0 ; i < nnodes ; i++) {
  1030. <string>
  1031.     paintNode(offgraphics, nodes[i], fm);
  1032. <string>
  1033. }
  1034. <string>
  1035.  
  1036. <string>
  1037. g.drawImage(offscreen, 0, 0, null);
  1038. <storable>
  1039. <string>
  1040. TJavaMethod
  1041. <string>
  1042. mouseDown
  1043. <string>
  1044. boolean
  1045. <integer>
  1046. 3
  1047. <storable>
  1048. <string>
  1049. TJavaArgument
  1050. <string>
  1051. evt
  1052. <string>
  1053. Event
  1054. <storable>
  1055. <string>
  1056. TJavaArgument
  1057. <string>
  1058. x
  1059. <string>
  1060. int
  1061. <storable>
  1062. <string>
  1063. TJavaArgument
  1064. <string>
  1065. y
  1066. <string>
  1067. int
  1068. <integer>
  1069. 3
  1070. <boolean>
  1071. FALSE
  1072. <boolean>
  1073. FALSE
  1074. <boolean>
  1075. FALSE
  1076. <boolean>
  1077. TRUE
  1078. <string>
  1079.  
  1080. <integer>
  1081. 15
  1082. <string>
  1083. double bestdist = Double.MAX_VALUE;
  1084. <string>
  1085. for (int i = 0 ; i < nnodes ; i++) {
  1086. <string>
  1087.     Node n = nodes[i];
  1088. <string>
  1089.     double dist = (n.x - x) * (n.x - x) + (n.y - y) * (n.y - y);
  1090. <string>
  1091.     if (dist < bestdist) {
  1092. <string>
  1093.     pick = n;
  1094. <string>
  1095.     bestdist = dist;
  1096. <string>
  1097.     }
  1098. <string>
  1099. }
  1100. <string>
  1101. pickfixed = pick.fixed;
  1102. <string>
  1103. pick.fixed = true;
  1104. <string>
  1105. pick.x = x;
  1106. <string>
  1107. pick.y = y;
  1108. <string>
  1109. repaint();
  1110. <string>
  1111. return true;
  1112. <storable>
  1113. <string>
  1114. TJavaMethod
  1115. <string>
  1116. mouseDrag
  1117. <string>
  1118. boolean
  1119. <integer>
  1120. 3
  1121. <storable>
  1122. <string>
  1123. TJavaArgument
  1124. <string>
  1125. evt
  1126. <string>
  1127. Event
  1128. <storable>
  1129. <string>
  1130. TJavaArgument
  1131. <string>
  1132. x
  1133. <string>
  1134. int
  1135. <storable>
  1136. <string>
  1137. TJavaArgument
  1138. <string>
  1139. y
  1140. <string>
  1141. int
  1142. <integer>
  1143. 3
  1144. <boolean>
  1145. FALSE
  1146. <boolean>
  1147. FALSE
  1148. <boolean>
  1149. FALSE
  1150. <boolean>
  1151. TRUE
  1152. <string>
  1153.  
  1154. <integer>
  1155. 4
  1156. <string>
  1157. pick.x = x;
  1158. <string>
  1159. pick.y = y;
  1160. <string>
  1161. repaint();
  1162. <string>
  1163. return true;
  1164. <storable>
  1165. <string>
  1166. TJavaMethod
  1167. <string>
  1168. mouseUp
  1169. <string>
  1170. boolean
  1171. <integer>
  1172. 3
  1173. <storable>
  1174. <string>
  1175. TJavaArgument
  1176. <string>
  1177. evt
  1178. <string>
  1179. Event
  1180. <storable>
  1181. <string>
  1182. TJavaArgument
  1183. <string>
  1184. x
  1185. <string>
  1186. int
  1187. <storable>
  1188. <string>
  1189. TJavaArgument
  1190. <string>
  1191. y
  1192. <string>
  1193. int
  1194. <integer>
  1195. 3
  1196. <boolean>
  1197. FALSE
  1198. <boolean>
  1199. FALSE
  1200. <boolean>
  1201. FALSE
  1202. <boolean>
  1203. TRUE
  1204. <string>
  1205.  
  1206. <integer>
  1207. 6
  1208. <string>
  1209. pick.x = x;
  1210. <string>
  1211. pick.y = y;
  1212. <string>
  1213. pick.fixed = pickfixed;
  1214. <string>
  1215. pick = null;
  1216. <string>
  1217. repaint();
  1218. <string>
  1219. return true;
  1220. <storable>
  1221. <string>
  1222. TJavaMethod
  1223. <string>
  1224. start
  1225. <string>
  1226.  
  1227. <integer>
  1228. 0
  1229. <integer>
  1230. 3
  1231. <boolean>
  1232. FALSE
  1233. <boolean>
  1234. FALSE
  1235. <boolean>
  1236. FALSE
  1237. <boolean>
  1238. FALSE
  1239. <string>
  1240.  
  1241. <integer>
  1242. 2
  1243. <string>
  1244. relaxer = new Thread(this);
  1245. <string>
  1246. relaxer.start();
  1247. <storable>
  1248. <string>
  1249. TJavaMethod
  1250. <string>
  1251. stop
  1252. <string>
  1253.  
  1254. <integer>
  1255. 0
  1256. <integer>
  1257. 3
  1258. <boolean>
  1259. FALSE
  1260. <boolean>
  1261. FALSE
  1262. <boolean>
  1263. FALSE
  1264. <boolean>
  1265. FALSE
  1266. <string>
  1267.  
  1268. <integer>
  1269. 1
  1270. <string>
  1271. relaxer.stop();
  1272. <integer>
  1273. 0
  1274. <boolean>
  1275. FALSE
  1276. <boolean>
  1277. TRUE
  1278. <integer>
  1279. 1
  1280. <storable>
  1281. <string>
  1282. TInheritance
  1283. <integer>
  1284. 347
  1285. <integer>
  1286. 142
  1287. <integer>
  1288. 367
  1289. <integer>
  1290. 162
  1291. <storable>
  1292. <string>
  1293. TJavaInterface
  1294. <integer>
  1295. 477
  1296. <integer>
  1297. 82
  1298. <integer>
  1299. 587
  1300. <integer>
  1301. 132
  1302. <string>
  1303. Runnable
  1304. <integer>
  1305. 0
  1306. <integer>
  1307. 1
  1308. <storable>
  1309. <string>
  1310. TJavaOperation
  1311. <string>
  1312. run
  1313. <string>
  1314.  
  1315. <integer>
  1316. 0
  1317. <integer>
  1318. 0
  1319. <boolean>
  1320. FALSE
  1321. <storable>
  1322. <string>
  1323. TInheritance
  1324. <integer>
  1325. 522
  1326. <integer>
  1327. 142
  1328. <integer>
  1329. 542
  1330. <integer>
  1331. 162
  1332. <storable>
  1333. <string>
  1334. TJavaClass
  1335. <integer>
  1336. 302
  1337. <integer>
  1338. 472
  1339. <integer>
  1340. 522
  1341. <integer>
  1342. 572
  1343. <string>
  1344. Graph
  1345. <integer>
  1346. 0
  1347. <integer>
  1348. 4
  1349. <storable>
  1350. <string>
  1351. TJavaMethod
  1352. <string>
  1353. init
  1354. <string>
  1355.  
  1356. <integer>
  1357. 0
  1358. <integer>
  1359. 3
  1360. <boolean>
  1361. FALSE
  1362. <boolean>
  1363. FALSE
  1364. <boolean>
  1365. FALSE
  1366. <boolean>
  1367. FALSE
  1368. <string>
  1369.  
  1370. <integer>
  1371. 31
  1372. <string>
  1373. setLayout(new BorderLayout());
  1374. <string>
  1375. panel = new GraphPanel(this);
  1376. <string>
  1377. add("Center", panel);
  1378. <string>
  1379. Panel p = new Panel();
  1380. <string>
  1381. add("South", p);
  1382. <string>
  1383. p.add(new Button("Scramble"));
  1384. <string>
  1385. p.add(new Button("Shake"));
  1386. <string>
  1387. p.add(new Checkbox("Stress"));
  1388. <string>
  1389. p.add(new Checkbox("Random"));
  1390. <string>
  1391. String edges = getParameter("edges");
  1392. <string>
  1393. for (StringTokenizer t = new StringTokenizer(edges, ",") ; t.hasMoreTokens() ; ) {
  1394. <string>
  1395.     String str = t.nextToken();
  1396. <string>
  1397.     int i = str.indexOf('-');
  1398. <string>
  1399.     if (i > 0) {
  1400. <string>
  1401.         int len = 50;
  1402. <string>
  1403.         int j = str.indexOf('/');
  1404. <string>
  1405.         if (j > 0) {
  1406. <string>
  1407.             len = Integer.valueOf(str.substring(j+1)).intValue();
  1408. <string>
  1409.             str = str.substring(0, j);
  1410. <string>
  1411.         }
  1412. <string>
  1413.         panel.addEdge(str.substring(0,i), str.substring(i+1), len);
  1414. <string>
  1415.     }
  1416. <string>
  1417. }
  1418. <string>
  1419. Dimension d = size();
  1420. <string>
  1421. String center = getParameter("center");
  1422. <string>
  1423. if (center != null){
  1424. <string>
  1425.     Node n = panel.nodes[panel.findNode(center)];
  1426. <string>
  1427.     n.x = d.width / 2;
  1428. <string>
  1429.     n.y = d.height / 2;
  1430. <string>
  1431.     n.fixed = true;
  1432. <string>
  1433. }
  1434. <storable>
  1435. <string>
  1436. TJavaMethod
  1437. <string>
  1438. start
  1439. <string>
  1440.  
  1441. <integer>
  1442. 0
  1443. <integer>
  1444. 3
  1445. <boolean>
  1446. FALSE
  1447. <boolean>
  1448. FALSE
  1449. <boolean>
  1450. FALSE
  1451. <boolean>
  1452. FALSE
  1453. <string>
  1454.  
  1455. <integer>
  1456. 1
  1457. <string>
  1458. panel.start();
  1459. <storable>
  1460. <string>
  1461. TJavaMethod
  1462. <string>
  1463. stop
  1464. <string>
  1465.  
  1466. <integer>
  1467. 0
  1468. <integer>
  1469. 3
  1470. <boolean>
  1471. FALSE
  1472. <boolean>
  1473. FALSE
  1474. <boolean>
  1475. FALSE
  1476. <boolean>
  1477. FALSE
  1478. <string>
  1479.  
  1480. <integer>
  1481. 1
  1482. <string>
  1483. panel.stop();
  1484. <storable>
  1485. <string>
  1486. TJavaMethod
  1487. <string>
  1488. action
  1489. <string>
  1490. boolean
  1491. <integer>
  1492. 2
  1493. <storable>
  1494. <string>
  1495. TJavaArgument
  1496. <string>
  1497. evt
  1498. <string>
  1499. Event
  1500. <storable>
  1501. <string>
  1502. TJavaArgument
  1503. <string>
  1504. arg
  1505. <string>
  1506. Object
  1507. <integer>
  1508. 3
  1509. <boolean>
  1510. FALSE
  1511. <boolean>
  1512. FALSE
  1513. <boolean>
  1514. FALSE
  1515. <boolean>
  1516. FALSE
  1517. <string>
  1518.  
  1519. <integer>
  1520. 33
  1521. <string>
  1522. if (arg instanceof Boolean) {
  1523. <string>
  1524.     if (((Checkbox)evt.target).getLabel().equals("Stress")) {
  1525. <string>
  1526.     panel.stress = ((Boolean)arg).booleanValue();
  1527. <string>
  1528.     } else {
  1529. <string>
  1530.     panel.random = ((Boolean)arg).booleanValue();
  1531. <string>
  1532.     }
  1533. <string>
  1534.     return true;
  1535. <string>
  1536. <string>
  1537. if ("Scramble".equals(arg)) {
  1538. <string>
  1539.     play(getCodeBase(), "audio/computer.au");
  1540. <string>
  1541.     Dimension d = size();
  1542. <string>
  1543.     for (int i = 0 ; i < panel.nnodes ; i++) {
  1544. <string>
  1545.     Node n = panel.nodes[i];
  1546. <string>
  1547.     if (!n.fixed) {
  1548. <string>
  1549.         n.x = 10 + (d.width-20)*Math.random();
  1550. <string>
  1551.         n.y = 10 + (d.height-20)*Math.random();
  1552. <string>
  1553.     }
  1554. <string>
  1555.     }
  1556. <string>
  1557.     return true;
  1558. <string>
  1559. }
  1560. <string>
  1561. if ("Shake".equals(arg)) {
  1562. <string>
  1563.     play(getCodeBase(), "audio/gong.au");
  1564. <string>
  1565.     Dimension d = size();
  1566. <string>
  1567.     for (int i = 0 ; i < panel.nnodes ; i++) {
  1568. <string>
  1569.     Node n = panel.nodes[i];
  1570. <string>
  1571.     if (!n.fixed) {
  1572. <string>
  1573.         n.x += 80*Math.random() - 40;
  1574. <string>
  1575.         n.y += 80*Math.random() - 40;
  1576. <string>
  1577.     }
  1578. <string>
  1579.     }
  1580. <string>
  1581.     return true;
  1582. <string>
  1583. }
  1584. <string>
  1585. return false;
  1586. <integer>
  1587. 1
  1588. <boolean>
  1589. FALSE
  1590. <boolean>
  1591. TRUE
  1592. <integer>
  1593. 0
  1594. <storable>
  1595. <string>
  1596. TJavaClass
  1597. <integer>
  1598. 637
  1599. <integer>
  1600. 322
  1601. <integer>
  1602. 747
  1603. <integer>
  1604. 357
  1605. <string>
  1606. Thread
  1607. <integer>
  1608. 0
  1609. <integer>
  1610. 0
  1611. <integer>
  1612. 0
  1613. <boolean>
  1614. FALSE
  1615. <boolean>
  1616. FALSE
  1617. <integer>
  1618. 0
  1619. <storable>
  1620. <string>
  1621. TJavaClass
  1622. <integer>
  1623. 302
  1624. <integer>
  1625. 377
  1626. <integer>
  1627. 412
  1628. <integer>
  1629. 412
  1630. <string>
  1631. Applet
  1632. <integer>
  1633. 0
  1634. <integer>
  1635. 0
  1636. <integer>
  1637. 0
  1638. <boolean>
  1639. FALSE
  1640. <boolean>
  1641. FALSE
  1642. <integer>
  1643. 0
  1644. <storable>
  1645. <string>
  1646. TInheritance
  1647. <integer>
  1648. 347
  1649. <integer>
  1650. 432
  1651. <integer>
  1652. 367
  1653. <integer>
  1654. 452
  1655. <storable>
  1656. <string>
  1657. TJavaClass
  1658. <integer>
  1659. 92
  1660. <integer>
  1661. 82
  1662. <integer>
  1663. 202
  1664. <integer>
  1665. 117
  1666. <string>
  1667. Object
  1668. <integer>
  1669. 0
  1670. <integer>
  1671. 0
  1672. <integer>
  1673. 0
  1674. <boolean>
  1675. FALSE
  1676. <boolean>
  1677. FALSE
  1678. <integer>
  1679. 0
  1680. <storable>
  1681. <string>
  1682. TInheritance
  1683. <integer>
  1684. 137
  1685. <integer>
  1686. 137
  1687. <integer>
  1688. 157
  1689. <integer>
  1690. 157
  1691. <storable>
  1692. <string>
  1693. TText
  1694. <integer>
  1695. 27
  1696. <integer>
  1697. 22
  1698. <integer>
  1699. 342
  1700. <integer>
  1701. 37
  1702. <string>
  1703. Graph Layout Example - from JDK version 1.1.1 Demo
  1704. <storable>
  1705. <string>
  1706. TText
  1707. <integer>
  1708. 27
  1709. <integer>
  1710. 42
  1711. <integer>
  1712. 342
  1713. <integer>
  1714. 57
  1715. <string>
  1716. 1997. 8. Model By Min-Kyu Lee (niklaus@nownuri.net)
  1717. <integer>
  1718. 13
  1719. <storable>
  1720. <string>
  1721. TSuperClassing
  1722. <integer>
  1723. 2
  1724. <integer>
  1725. 4
  1726. <integer>
  1727. 2
  1728. <integer>
  1729. 357
  1730. <integer>
  1731. 117
  1732. <integer>
  1733. 357
  1734. <integer>
  1735. 142
  1736. <storable>
  1737. <string>
  1738. TSubClassing
  1739. <integer>
  1740. 4
  1741. <integer>
  1742. 3
  1743. <integer>
  1744. 3
  1745. <integer>
  1746. 367
  1747. <integer>
  1748. 162
  1749. <integer>
  1750. 407
  1751. <integer>
  1752. 162
  1753. <integer>
  1754. 407
  1755. <integer>
  1756. 177
  1757. <storable>
  1758. <string>
  1759. TAssociation
  1760. <integer>
  1761. 3
  1762. <integer>
  1763. 0
  1764. <integer>
  1765. 3
  1766. <integer>
  1767. 302
  1768. <integer>
  1769. 342
  1770. <integer>
  1771. 77
  1772. <integer>
  1773. 342
  1774. <integer>
  1775. 77
  1776. <integer>
  1777. 307
  1778. <string>
  1779.  
  1780. <string>
  1781. nodes
  1782. <integer>
  1783. 0
  1784. <integer>
  1785. 0
  1786. <integer>
  1787. 1
  1788. <integer>
  1789. 1
  1790. <integer>
  1791. 100
  1792. <storable>
  1793. <string>
  1794. TAssociation
  1795. <integer>
  1796. 3
  1797. <integer>
  1798. 1
  1799. <integer>
  1800. 3
  1801. <integer>
  1802. 302
  1803. <integer>
  1804. 312
  1805. <integer>
  1806. 217
  1807. <integer>
  1808. 312
  1809. <integer>
  1810. 217
  1811. <integer>
  1812. 257
  1813. <string>
  1814.  
  1815. <string>
  1816. edges
  1817. <integer>
  1818. 0
  1819. <integer>
  1820. 0
  1821. <integer>
  1822. 1
  1823. <integer>
  1824. 1
  1825. <integer>
  1826. 200
  1827. <storable>
  1828. <string>
  1829. TSuperClassing
  1830. <integer>
  1831. 5
  1832. <integer>
  1833. 6
  1834. <integer>
  1835. 2
  1836. <integer>
  1837. 532
  1838. <integer>
  1839. 132
  1840. <integer>
  1841. 532
  1842. <integer>
  1843. 142
  1844. <storable>
  1845. <string>
  1846. TSubClassing
  1847. <integer>
  1848. 6
  1849. <integer>
  1850. 3
  1851. <integer>
  1852. 3
  1853. <integer>
  1854. 522
  1855. <integer>
  1856. 162
  1857. <integer>
  1858. 457
  1859. <integer>
  1860. 162
  1861. <integer>
  1862. 457
  1863. <integer>
  1864. 177
  1865. <storable>
  1866. <string>
  1867. TAssociation
  1868. <integer>
  1869. 3
  1870. <integer>
  1871. 8
  1872. <integer>
  1873. 3
  1874. <integer>
  1875. 587
  1876. <integer>
  1877. 202
  1878. <integer>
  1879. 692
  1880. <integer>
  1881. 202
  1882. <integer>
  1883. 692
  1884. <integer>
  1885. 322
  1886. <string>
  1887.  
  1888. <string>
  1889. relaxer
  1890. <integer>
  1891. 0
  1892. <integer>
  1893. 0
  1894. <integer>
  1895. 0
  1896. <integer>
  1897. 0
  1898. <integer>
  1899. 0
  1900. <storable>
  1901. <string>
  1902. TAssociation
  1903. <integer>
  1904. 7
  1905. <integer>
  1906. 3
  1907. <integer>
  1908. 2
  1909. <integer>
  1910. 467
  1911. <integer>
  1912. 472
  1913. <integer>
  1914. 467
  1915. <integer>
  1916. 357
  1917. <string>
  1918. graph
  1919. <string>
  1920. panel
  1921. <integer>
  1922. 0
  1923. <integer>
  1924. 0
  1925. <integer>
  1926. 0
  1927. <integer>
  1928. 0
  1929. <integer>
  1930. 0
  1931. <storable>
  1932. <string>
  1933. TSuperClassing
  1934. <integer>
  1935. 9
  1936. <integer>
  1937. 10
  1938. <integer>
  1939. 2
  1940. <integer>
  1941. 357
  1942. <integer>
  1943. 412
  1944. <integer>
  1945. 357
  1946. <integer>
  1947. 432
  1948. <storable>
  1949. <string>
  1950. TSubClassing
  1951. <integer>
  1952. 10
  1953. <integer>
  1954. 7
  1955. <integer>
  1956. 3
  1957. <integer>
  1958. 367
  1959. <integer>
  1960. 452
  1961. <integer>
  1962. 417
  1963. <integer>
  1964. 452
  1965. <integer>
  1966. 417
  1967. <integer>
  1968. 472
  1969. <storable>
  1970. <string>
  1971. TSuperClassing
  1972. <integer>
  1973. 11
  1974. <integer>
  1975. 12
  1976. <integer>
  1977. 2
  1978. <integer>
  1979. 147
  1980. <integer>
  1981. 117
  1982. <integer>
  1983. 147
  1984. <integer>
  1985. 137
  1986. <storable>
  1987. <string>
  1988. TSubClassing
  1989. <integer>
  1990. 12
  1991. <integer>
  1992. 0
  1993. <integer>
  1994. 3
  1995. <integer>
  1996. 137
  1997. <integer>
  1998. 157
  1999. <integer>
  2000. 72
  2001. <integer>
  2002. 157
  2003. <integer>
  2004. 72
  2005. <integer>
  2006. 177
  2007. <storable>
  2008. <string>
  2009. TSubClassing
  2010. <integer>
  2011. 12
  2012. <integer>
  2013. 1
  2014. <integer>
  2015. 3
  2016. <integer>
  2017. 157
  2018. <integer>
  2019. 157
  2020. <integer>
  2021. 212
  2022. <integer>
  2023. 157
  2024. <integer>
  2025. 212
  2026. <integer>
  2027. 177
  2028.