1. 程式人生 > >Java 文字從下向上滾動特效實現

Java 文字從下向上滾動特效實現

 

package com.image

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CaptionSpecificFrame extends JFrame {
    private Image img = null; // 宣告影象物件
    private CaptionSpecificPanel captionSpecificPanel = null; // 宣告影象面板物件
    
    public static void main(String args[]) {
        CaptionSpecificFrame frame = new CaptionSpecificFrame();
        frame.setVisible(true);
    }
    
    public CaptionSpecificFrame() {
        super();
        URL imgUrl = CaptionSpecificFrame.class.getResource("/img/image.jpg");// 獲取圖片資源的路徑
        img = Toolkit.getDefaultToolkit().getImage(imgUrl); // 獲取影象資源
        captionSpecificPanel = new CaptionSpecificPanel(); // 建立影象面板物件
        this.setBounds(200, 160, 316, 237); // 設定窗體大小和位置
        this.add(captionSpecificPanel); // 在窗體上新增影象面板物件
        Thread thread = new Thread(captionSpecificPanel);// 建立執行緒物件
        thread.start();// 啟動執行緒物件
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設定窗體關閉模式
        this.setTitle("字幕從下向上滾動特效"); // 設定窗體標題
    }
    
    // 建立面板類
    class CaptionSpecificPanel extends JPanel implements Runnable {
        int x = 30;// 儲存繪製點的x座標
        int y = 216;// 儲存繪製點的y座標
        String value = "我愛Java";// 儲存繪製的內容
        public void paint(Graphics g) {
            g.clearRect(0, 0, 316, 237);// 清除繪圖上下文的內容
            g.drawImage(img, 0, 0, getWidth(), getHeight(), this);// 繪製圖像
            Font font = new Font("黑體", Font.BOLD, 20);// 建立字型物件
            g.setFont(font);// 指定字型
            g.setColor(Color.RED);// 指定顏色
            g.drawString(value, x, y);// 繪製文字
        }
        public void run() {
            try {
                while (true) { // 讀取內容
                    Thread.sleep(100); // 當前執行緒休眠1秒
                    if (y <= 216 - 50) {// 如果已經向上移動50畫素
                        y = 216;// y座標定位到最下方
                        if (value.equals("我愛Java")) {
                            value = "今天又是努力學習的一天";// 改變繪製的內容
                        } else {
                            value = "我愛Java";// 改變繪製的內容
                        }
                    } else {// 如果還沒向上移動到50畫素
                        y -= 2;// y座標上移
                    }
                    repaint();// 呼叫paint()方法
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}