⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 globalview.java

📁 Libgist is an implementation of the Generalized Search Tree, a template index structure that makes i
💻 JAVA
字号:
// GlobalView.java// Copyright (c) 1998, Regents of the University of California// $Id: GlobalView.java,v 1.2 1999/06/27 00:17:38 marcel Exp $import javax.swing.*;import javax.swing.border.*;import javax.swing.event.*;import javax.swing.plaf.*;import java.awt.*;import java.awt.event.*;import java.util.*;class GlobalDisplayUI extends ComponentUI implements MouseListener {public static int minwidth = 20;public static int maxindwid = 10;public static int height;public static int skip = 2;public static int minheight = 20;public static int maxheight = 500;public TreeView tv;public GlobalView gv;public Vector levels;public int levelWid[];public int wscale, hscale;protected Dimension pSize = new Dimension(100,100);public GlobalDisplayUI(TreeView tv, GlobalView gv) {    try {	this.tv = tv;	this.gv = gv;	wscale = 0;	hscale = 0;		levels = new Vector();		int i,j,k,childnum;		int[] childnos = new int[Libgist.maxChildren()];	int[] currLevel = new int[1];    	currLevel[0] = tv.rootNode.nodenum;	Vector nextLevel = new Vector();	boolean moreChildren = true;	do {	    for (i=0; i < currLevel.length; i++) {				childnum = Libgist.getChildren(currLevel[i], childnos);		if (childnum == 0) {		    		    moreChildren = false;		    break;		}		for (j=0; j < childnum; j++)		    nextLevel.addElement(new Integer(childnos[j]));			    }	    int size;	    size = nextLevel.size();	    	    levels.addElement(currLevel);	    currLevel = new int[size];	    for (i=0; i < size; i++) 		currLevel[i] = ((Integer) nextLevel.elementAt(i)).intValue();	    	    nextLevel.removeAllElements();	} while (moreChildren);	DbgOutput.println(1,"Finished ... ");    } catch (LibgistException ex) {	DbgOutput.println(1,"Hmmm ... " + ex);	return;    }	}public void paint(Graphics g, JComponent c) {    int h = c.getPreferredSize().height - 10;    int w = c.getPreferredSize().width -10;    int i, lh, lw;    int numlevels = levels.size();    levelWid = new int[numlevels];    // give a little slack ...    g.translate(5,5);    for (i = 0; i < numlevels; i++) {	lh = (i+1) * (height + skip);		lw = (int) Math.floor((double) (lh * w) / (double) h);	lw = (lw > minwidth) ? lw : minwidth;		levelWid[i] = lw;		g.translate( (w - lw) / 2, 0 );	paintLevel(g,lw,i,c);	g.translate( -(w - lw) / 2, height + skip );    }}public int smoothRange(int[] level, int start, int end) {    int i, index;    float avg;    avg = 0;    int nc = 0; // not counted ...    for (i = start; i < end; i++)	if (Float.isInfinite(tv.stats[level[i]]) ||	    Float.isNaN(tv.stats[level[i]]))	    nc++;	else	    avg += tv.stats[level[i]];    avg = (float) avg / (float) (end - start - nc);    if (tv.ratio > 0) {	index = (int) Math.floor((float)(avg - tv.minStat) * tv.ratio);		index = (index == 256) ? 255 : index;    } else	index = 0;    return index;}public void paintLevel(Graphics g, int lw, int level, JComponent c) {    int[] currLevel = (int [])(levels.elementAt(level));        int length = currLevel.length;    int i, istart = 0, iend, smooth;        // Color back = g.getColor();    Color back = c.getBackground();    if (lw <= length) {		double r = (double) length / (double) lw;		for (i = 0; i < lw; i++) {	    	    iend = (int) Math.floor( r * (double)(i + 1));	    iend = (iend > length) ? length : iend;	    smooth = smoothRange(currLevel,istart,iend);	    	    // DbgOutput.println(1,currLevel[istart] + " " +	    // 		currLevel[iend - 1] + " " + smooth);	    g.setColor(tv.pallette[smooth]);	    g.fillRect(i,0,1,height);	    istart = iend;	}	    } else {	// lw > length;	Color statColor = null;	double r = (double) lw / (double) length;	for (i = 0; i < length; i++) {	    iend = (int) Math.ceil( r * (double)(i + 1));	    	    if (Float.isInfinite(tv.stats[currLevel[i]]) ||		Float.isNaN(tv.stats[currLevel[i]]))		statColor = back;	    else {		if (tv.ratio > 0) {		    int index = (int) Math.floor(			(double)(tv.stats[currLevel[i]] - tv.minStat) *			tv.ratio);		    		    if (index >= 256)			index = 255;		    else if (index < 0)			index = 0;		    // index = (index >= 256) ? 255 : index;		    		    statColor =	(tv.pallette[ index ]);		} else		    statColor = tv.pallette[0];	    }	    // this is a hack ...	    if (statColor == back) {		g.clearRect(istart, 0, iend - istart, height);		// g.drawRect(istart, 0, iend - istart, height);	    } else {		g.setColor(statColor);				g.fillRect(istart, 0 , iend - istart, height);	    }	    istart = iend;	}    }    // g.setColor(back);}public Dimension getPreferredSize(JComponent c) {//     height = (int) Math.floor( (double) (maxheight - minheight) *// 	(double) hscale / (double) 100) + minheight;    int numlevels = levels.size();    Insets in = gv.scroll.getViewport().getInsets();    height = (int) Math.floor((double) 	(gv.scroll.getViewport().getSize().height - 10 - in.top - in.bottom) / 	(double) numlevels);        height = (height < minheight) ? minheight : height;    height -= skip;    int h = (height + skip)*levels.size();        int w = (int) Math.floor(((double) wscale / (double)100) * 	(double) 	(((int[])(levels.elementAt(numlevels - 1))).length * maxindwid - 	    minwidth)) + minwidth;    pSize.width = w + 10;    pSize.height = h + 10;    // DbgOutput.println(1,pSize);    return pSize;}public Dimension getMinimumSize(JComponent c) {    return getPreferredSize(c);}public void mouseClicked(MouseEvent e) {    // DbgOutput.println(1,e.getX() + ", " + e.getY());    Dimension size = getPreferredSize((JComponent) e.getSource());    int y = e.getY() - 5; // remove top border ...     if ( y < 0 ) {	// in top border	// DbgOutput.println(1,"NOTIN 1");	return;    }    int h = size.height - 10;     // remove both  borders ...        if ( y >= h ) {      // in bottom border	// DbgOutput.println(1,"NOTIN 3");	return;    }    int level = y / (height + skip);       if ( (y - (level * (height + skip))) > height ) { // in gaps ...	// DbgOutput.println(1,"NOTIN 2");	return;    }    // DbgOutput.println(1,"LEVEL " + level);    int lw = levelWid[level];    int w = size.width - 10; // remove both borders        int x = e.getX() - 5 - ((w - lw) / 2); // remove left border ...        if ( x < 0 ) { // in left border	// DbgOutput.println(1,"NOTIN L");	return;    }    if ( x >= lw ) { // in right border	// DbgOutput.println(1,"NOTIN R");	return;    }    int[] currLevel = (int []) levels.elementAt(level);    int length =  currLevel.length;        //    if (lw <= length) {	    int istart = (int) Math.floor(((float) x / (float) lw) * (float) length);    int iend   = (int) Math.floor(((float) (x + 1) / (float) lw) * 	(float) length);        // DbgOutput.println(1,"[" + istart + ", " + iend + ") :" + length);        int i = istart;    try {	do {	    tv.showPath(currLevel[i]);	    i++;	} while (i < iend);    } catch (Exception ex) {	System.out.println("Global Display - mouseClicked");	System.out.println(ex);    }    return;}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}}class GlobalDisplay extends JComponent {public GlobalDisplayUI ui;public GlobalDisplay(TreeView tv, GlobalView gv) {    ui = new GlobalDisplayUI(tv, gv);    setUI( ui);    addMouseListener(ui);}}public class GlobalView extends JInternalFrame implements ChangeListener {public GlobalDisplay gd;public JScrollPane scroll;public JSlider    hslide;public JSlider    vslide;public GlobalView(TreeView tv) {        // DbgOutput.println(1,"IN HERE");    setTitle("Global View");    setSize(200,150);    setResizable( true );    setClosable(true);    setIconifiable(true);    hslide = new JSlider(JSlider.HORIZONTAL, 0, 100, 0);    hslide.setPaintTicks(true);    hslide.setMajorTickSpacing(20);    hslide.setMinorTickSpacing(5);    //    hslide.setPaintLabels( true );//     vslide = new JSlider(JSlider.VERTICAL, 0, 100, 0);//     vslide.setInverted( true );//     vslide.setPaintTicks(true);//     vslide.setMajorTickSpacing(25);//     vslide.setMinorTickSpacing(10);//     vslide.setPaintLabels( true );        hslide.addChangeListener(this);//     vslide.addChangeListener(this);    gd = new GlobalDisplay(tv, this);        scroll = new JScrollPane(gd);    getContentPane().setLayout(new BorderLayout());    getContentPane().add(scroll, BorderLayout.CENTER);        // getContentPane().add(gd, BorderLayout.CENTER);    getContentPane().add(hslide, BorderLayout.NORTH);//     getContentPane().add(vslide, BorderLayout.WEST);}public void stateChanged(ChangeEvent e) {    JSlider s1 = (JSlider)e.getSource();    // DbgOutput.println(1,s1.getValue());    if (s1 == hslide)	gd.ui.wscale = s1.getValue();//     else// 	gd.ui.hscale = s1.getValue();    gd.invalidate();    gd.repaint();    validate();}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -