<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Swing自定義組件: SwitchButton

    最近跟JList走的比較近.聽說她最近離婚了..唉...可惜啊.可惜.
    聽JList說 是因為她脾氣比較暴躁..不知道什么時候 該開 什么時候該關.
    說實話..我很喜歡替美女解決煩惱,特別像JList這么漂亮又乖巧得..
    那么.咱們來用一個開關..也許能起到些作用....

    當然.不會讓滑塊瞬間轉移,而是優美得滑過去..這樣才配的上美麗的JList.

    |----------------------------------------------------------------------------------------|
                         版權聲明  版權所有 @chensiyu
                引用請注明來源 
    www.tkk7.com/chensiyu04

                本文由  陳思羽 于 2011年9月2號 出品..
    |----------------------------------------------------------------------------------------|





    目前還不太完美..有時間在整下.

    package swing;

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Paint;
    import java.awt.RenderingHints;
    import java.awt.Shape;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.geom.RoundRectangle2D;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JToggleButton;
    import javax.swing.SwingUtilities;
    import javax.swing.Timer;

    /**
     *
     * 
    @author chensiyu
     * @createDate 2011/9/2
     * @address www.tkk7.com/chensiyu04
     * 
     
    */
    public class SwitchButton extends JToggleButton implements ActionListener {

        
    private static final int ARCNUMBER = 35;
        
    private int currentResolution = 50;
        
    private long cycleStart;
        
    private Timer timer = null;
        
    private final int MOVE_TIME = 2000;
        
    private int moveMinX;
        
    private int moveMaxX;
        
    private int buttonX;
        
    private ActionListener moveActionListener = new ActionListener() {

            @Override
            
    public void actionPerformed(ActionEvent e) {
                startTimer(currentResolution);
            }
        };

        
    public SwitchButton() {
            setBorder(
    null);
            addActionListener(moveActionListener);
        }

        @Override
        
    protected void paintComponent(Graphics g) {
            
    super.paintComponent(g);
            Graphics2D g2 
    = (Graphics2D) g;
            Color oldColor 
    = g2.getColor();
            g2.setColor(Color.WHITE);
            g2.fillRect(
    00, getWidth(), getHeight());
            g2.setColor(oldColor);

            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
            Shape backgroundShape 
    = new RoundRectangle2D.Float(11, getWidth() - 2, getHeight() - 2, ARCNUMBER, ARCNUMBER);

            
    boolean selected = getModel().isSelected();
            
    //fill shape
            Paint paint = null;
            
    if (selected) {
                paint 
    = new GradientPaint(00new Color(45106169), 0, getHeight(), new Color(135183245));
            } 
    else {
                paint 
    = new GradientPaint(00new Color(144144144), 0, getHeight(), new Color(244244244));
            }
            g2.setPaint(paint);
            g2.fill(backgroundShape);
            
    //draw shape bounds
            g2.setColor(Color.DARK_GRAY);
            g2.draw(backgroundShape);

            JLabel onLabel 
    = new JLabel("ON");
            JLabel offLabel 
    = new JLabel("OFF");
            Dimension labelSize;
            
    //draw text.  off/on
            if (selected) {
                oldColor 
    = g2.getColor();
                g2.setColor(Color.WHITE);
                labelSize 
    = onLabel.getPreferredSize();
                g2.drawString(onLabel.getText(), getWidth() 
    / 2 / 2 - labelSize.width / 2, getHeight() / 2 + labelSize.height / 2);
                g2.setColor(oldColor);
            } 
    else {
                oldColor 
    = g2.getColor();
                g2.setColor(Color.BLACK);
                labelSize 
    = offLabel.getPreferredSize();
                g2.drawString(offLabel.getText(), getWidth() 
    / 2 + labelSize.width / 2, getHeight() / 2 + labelSize.height / 2);
                g2.setColor(oldColor);
            }
            
    //draw button
            int buttonY = 0;
            
    int buttonWidth = getWidth() / 2;
            
    int buttonHeight = getHeight();
            Shape buttonShape 
    = new RoundRectangle2D.Float(buttonX, buttonY, buttonWidth, buttonHeight, ARCNUMBER, ARCNUMBER);
            paint 
    = new GradientPaint(00new Color(244244244), 0, getHeight(), new Color(144144144));
            g2.setPaint(paint);
            g2.fill(buttonShape);
            g2.setColor(
    new Color(140140140));
            g2.draw(buttonShape);
        }

        
    public static void main(String[] args) {
            SwitchButton button 
    = new SwitchButton();
            button.setBounds(
    601010030);

            JPanel mainPane 
    = new JPanel();
            mainPane.setOpaque(
    true);
            mainPane.setBackground(Color.WHITE);
            mainPane.setLayout(
    null);
            mainPane.add(button);

            
    final JFrame frame = new JFrame();
            frame.setTitle(
    "SwitchButton Demo");
            frame.setLayout(
    new BorderLayout());
            frame.getContentPane().add(mainPane, BorderLayout.CENTER);
            frame.setSize(
    23380);
            frame.setLocationRelativeTo(
    null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            SwingUtilities.invokeLater(
    new Runnable() {

                @Override
                
    public void run() {
                    frame.setVisible(
    true);
                }
            });
        }

        @Override
        
    public void actionPerformed(ActionEvent e) {
            
    long currentTime = System.nanoTime() / 1000000;
            
    long totalTime = currentTime - cycleStart;

            
    if (totalTime > MOVE_TIME) {
                cycleStart 
    = currentTime;
            }
            
    float fraction = (float) totalTime / MOVE_TIME;
            fraction 
    = Math.min(1.0f, fraction);
            fraction 
    = 1 - Math.abs(1 - (2 * fraction));
            animate(fraction);
        }

        
    public void animate(float fraction) {
            
    float animationFactor = (float) Math.sin(fraction * (float) Math.PI / 2);
            animationFactor 
    = Math.min(animationFactor, 1.0f);
            animationFactor 
    = Math.max(animationFactor, 0.0f);
            buttonX 
    = moveMinX + (int) (.5f + animationFactor * (float) (moveMaxX - moveMinX));
            
    if (isSelected()) {
                
    if (buttonX >= moveMaxX) {
                    timer.stop();
                    timer.setInitialDelay(
    100);
                    buttonX 
    = getWidth() / 2 - 1;
                }
            } 
    else {
                
    if (buttonX - 1 <= moveMaxX) {
                    timer.stop();
                    timer.setInitialDelay(
    100);
                    buttonX 
    = 0;
                }
            }
            repaint();
        }

        
    private void startTimer(int resolution) {
            
    if (timer == null) {
                timer 
    = new Timer(resolution, this);
            }
            
    if (!timer.isRunning()) {
                
    if (isSelected()) {
                    moveMinX 
    = 0;
                    moveMaxX 
    = getWidth() / 2 - 1;
                } 
    else {
                    moveMinX 
    = getWidth() / 2 - 1;
                    moveMaxX 
    = 0;
                }
                timer.start();
            }

        }
    }

    posted on 2011-09-02 15:33 相信 閱讀(2622) 評論(0)  編輯  收藏 所屬分類: Swing文章

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    公告

    不顯示applet

    常用鏈接

    留言簿(16)

    我參與的團隊

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    swingchina 專業搞Swing的網站

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲第一精品在线视频| 亚洲尤码不卡AV麻豆| 亚洲人成无码网站久久99热国产| 精品亚洲视频在线观看 | 成全影视免费观看大全二| 日本一区免费电影| 中文字幕精品亚洲无线码一区| 亚洲成色在线影院| 99亚偷拍自图区亚洲| 精品免费AV一区二区三区| 两性色午夜视频免费播放| 中文免费观看视频网站| 免费国产综合视频在线看| 亚洲高清国产拍精品26U| 久久亚洲国产最新网站| 皇色在线免费视频| 国产免费不卡v片在线观看| 男人的天堂亚洲一区二区三区 | 国产在线19禁免费观看| 精品久久香蕉国产线看观看亚洲| 亚洲一级在线观看| 亚洲免费在线观看| 最近高清中文字幕无吗免费看| 成人永久免费福利视频网站| 亚洲国产精品乱码一区二区 | 免费大片黄在线观看| 最近2018中文字幕免费视频 | 亚洲欧洲日本在线| 亚洲午夜成激人情在线影院| 国产精品亚洲一区二区三区| 久久免费公开视频| 亚洲Aⅴ无码一区二区二三区软件| 亚洲伊人久久大香线蕉苏妲己| 亚洲AV无码一区二区三区鸳鸯影院| 成人黄网站片免费视频| 免费的一级片网站| 亚洲av无码潮喷在线观看 | 亚洲AV成人精品日韩一区| 久久大香伊焦在人线免费| 免费国产在线观看老王影院| 亚洲电影唐人社一区二区|