栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何缓慢地将对象的颜色从一种改变为另一种?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何缓慢地将对象的颜色从一种改变为另一种?

这是一个示例,当您在组件之间移动时,背景会逐渐变暗:

import java.awt.*;import java.awt.event.*;import java.util.Hashtable;import java.util.ArrayList;import javax.swing.*;public class Fader{    //  background color when component has focus    private Color fadeColor;    //  steps to fade from original background to fade background    private int steps;    //  apply transition colors at this time interval    private int interval;    //  store transition colors from orginal background to fade background    private Hashtable backgroundColors = new Hashtable();        public Fader(Color fadeColor)    {        this(fadeColor, 10, 50);    }        public Fader(Color fadeColor, int steps)    {        this(fadeColor, steps, 50);    }        public Fader(Color fadeColor, int steps, int interval)    {        this.fadeColor = fadeColor;        this.steps = steps;        this.interval = interval;    }        public Fader add(JComponent component)    {        //  Get colors to be used for fading        ArrayList colors = getColors( component.getBackground() );        //  FaderTimer will apply colors to the component        new FaderTimer( colors, component, interval );        return this;    }        private ArrayList getColors(Color background)    {        //  Check if the color ArrayList already exists        Object o = backgroundColors.get( background );        if (o != null)        { return (ArrayList)o;        }        //  Doesn't exist, create fader colors for this background        ArrayList colors = new ArrayList( steps + 1 );        colors.add( background );        int rDelta = ( background.getRed() - fadeColor.getRed() ) / steps;        int gDelta = ( background.getGreen() - fadeColor.getGreen() ) / steps;        int bDelta = ( background.getBlue() - fadeColor.getBlue() ) / steps;        for (int i = 1; i < steps; i++)        { int rValue = background.getRed() - (i * rDelta); int gValue = background.getGreen() - (i * gDelta); int bValue = background.getBlue() - (i * bDelta); colors.add( new Color(rValue, gValue, bValue) );        }        colors.add( fadeColor );        backgroundColors.put(background, colors);        return colors;    }    class FaderTimer implements FocusListener, ActionListener    {        private ArrayList colors;        private JComponent component;        private Timer timer;        private int alpha;        private int increment;        FaderTimer(ArrayList colors, JComponent component, int interval)        { this.colors = colors; this.component = component; component.addFocusListener( this ); timer = new Timer(interval, this);        }        public void focusGained(FocusEvent e)        { alpha = 0; increment = 1; timer.start();        }        public void focusLost(FocusEvent e)        { alpha = steps; increment = -1; timer.start();        }        public void actionPerformed(ActionEvent e)        { alpha += increment; component.setBackground( (Color)colors.get(alpha) ); if (alpha == steps || alpha == 0)     timer.stop();        }    }    public static void main(String[] args)    {        // Create test components        JComponent textField1 = new JTextField(10);        textField1.setBackground( Color.YELLOW );        JComponent textField3 = new JTextField(10);        JComponent textField4 = new JTextField(10);        JComponent button = new JButton("Start");        JComponent checkBox = new JCheckBox("Check Box");        Jframe frame = new Jframe("Fading Background");        frame.setDefaultCloseOperation( Jframe.EXIT_ON_CLOSE );        frame.getContentPane().add(textField1, BorderLayout.NORTH );        frame.getContentPane().add(button, BorderLayout.SOUTH );        frame.getContentPane().add(textField3, BorderLayout.WEST );        frame.getContentPane().add(textField4, BorderLayout.EAST );        frame.getContentPane().add(checkBox);        //  Gradual Fading (using defaults)//      Fader fader = new Fader( new Color(155, 255, 155) );        Fader fader = new Fader( new Color(155, 255, 155), 10, 50 );        fader.add( textField1 );        fader.add( textField3 );        fader.add( checkBox );        //  Instant Fading        fader = new Fader( new Color(255, 155, 155), 1, 1 );        fader.add( textField4 );        fader.add( button );        frame.pack();        frame.setVisible( true );    }}

它使用计时器以指定的间隔更新背景。然后,它仅根据所需的步数在两种颜色之间进行插值。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569285.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号