欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

动态切换标签,切换标签,public class

来源: javaer 分享于  点击 35014 次 点评:202

动态切换标签,切换标签,public class


public class TransitionTabbedPane extends JTabbedPane         implements ChangeListener, Runnable {        protected int animation_length = 20;public TransitionTabbedPane() {            super();            this.addChangeListener(this);        }        public int getAnimationLength() {            return this.animation_length;        }        public void setAnimationLength(int length) {            this.animation_length = length;        }    // threading code    public void stateChanged(ChangeEvent evt) {        new Thread(this).start();    }    protected int step;    protected BufferedImage buf = null;    protected int previous_tab = -1;    public void run() {        step = 0;    // save the previous tab    if(previous_tab != -1) {        Component comp = this.getComponentAt(previous_tab);        buf = new BufferedImage(comp.getWidth(),            comp.getHeight(),            BufferedImage.TYPE_4BYTE_ABGR);        comp.paint(buf.getGraphics());    }    for(int i=0; i<animation_length; i++) {    step = i;    repaint();    try {        Thread.currentThread().sleep(100);    } catch (Exception ex) {        p("ex: " + ex);    }}    step = -1;    previous_tab = this.getSelectedIndex();    repaint();    public void paintChildren(Graphics g) {        super.paintChildren(g);        if(step != -1) {            Rectangle size = this.getComponentAt(0).getBounds();            Graphics2D g2 = (Graphics2D)g;            paintTransition(g2, step, size, buf);        }    }    public void paintTransition(Graphics2D g2, int step,        Rectangle size, Image prev) {    }}    public class InOutPane extends TransitionTabbedPane {        public void paintTransition(Graphics2D g2, int state,            Rectangle size, Image prev) {        int length = getAnimationLength();        int half = length/2;        double scale = size.getHeight()/length;        int offset = 0;        // calculate the fade out part        if(state >= 0 && state < half) { // draw the saved version of the old tab component         if(prev != null) {            g2.drawImage(prev,(int)size.getX(),(int)size.getY(),null);        }         offset = (int)((10-state)*scale);    }    // calculate the fade in part    if(state >= half && state < length) {        g2.setColor(Color.white);        offset = (int)((state-10)*scale);    }    // do the drawing    g2.setColor(Color.white);    Rectangle area = new Rectangle((int)(size.getX()+offset),        (int)(size.getY()+offset),        (int)(size.getWidth()-offset*2),        (int)(size.getHeight()-offset*2));    g2.fill(area);     } }    public class TabFadeTest {        public static void main(String[] args) {            JFrame frame = new JFrame("Fade Tabs");   JTabbedPane tab = new InOutPane();            tab.addTab("t1",new JButton("Test Button 1"));            tab.addTab("t2",new JButton("Test Button 2"));            frame.getContentPane().add(tab);            frame.pack();            frame.show();            }        }    public class VenetianPane extends TransitionTabbedPane {         public void paintTransition(Graphics2D g2, int step,                 Rectangle size, Image prev) {            int length = getAnimationLength();            int half = length/2;            // create a blind            Rectangle blind = new Rectangle();            // calculate the fade out part            if(step >= 0 && step < half) {                // draw the saved version of the old tab component                if(prev != null) {                g2.drawImage(prev,(int)size.getX(),(int)size.getY(),null);                 }                 // calculate the growing blind                 blind = new Rectangle(                (int)size.getX(),                (int)size.getY(),                step,                (int)size.getHeight());            }            // calculate the fade in part            if(step >= half && step < length) {                // calculate the shrinking blind                blind = new Rectangle(                (int)size.getX(),                (int)size.getY(),                length-step,                (int)size.getHeight());                blind.translate(step-half,0);            }            // draw the blinds            for(int i=0; i<size.getWidth()/half; i++) {                g2.setColor(Color.white);                g2.fill(blind);                blind.translate(half,0);                }            }         }}//该片段来自于http://byrx.net
相关栏目:

用户点评