为JEdit设置墙纸(add wallpaper for jedit)

类别:Java 点击:0 评论:0 推荐:

1). 前提(condition)
+ jedit4.2final
+ jdk 1.4
2). 步骤(steps)
1. add this at org.gjt.sp.jedit.textarea.TextAreaPainter
in method paintComponent(...)
after:
        extensionMgr.paintScreenLineRange(textArea, gfx, firstInvalid,
                lastInvalid, y, height);
add:
        { // paint wallpaper after all that should be paint
        Rectangle rect = this.getVisibleRect();
        Wallpaper.paintWallpaper(gfx, rect.x, rect.y, rect.width,
                rect.width, this);
        }
        
2. add in org.gjt.sp.jedit.textarea.JEditTextArea        
//    {{{ changeWallpaperDialog() method   
// for change the wallpaper
    /**    
     * Displays the 'changeWallpaperDialog' dialog box.
     * @author neoedmund
     */
    public void changeWallpaperDialog()
    {    
        if (Wallpaper.changeWallpaper(this)){
            repaint();        
        }
    } //}}}

3. add new class org.gjt.sp.jedit.textarea.Wallpaper
/*
 * Created on 2005-3-26
 */
package org.gjt.sp.jedit.textarea;

import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFileChooser;

/**
 * @author neoe
 */
public class Wallpaper {
    
    static BufferedImage pic;
    private static final String DEFALUT_IMG = "org/gjt/sp/jedit/icons/wallpaper.jpg";
    static{
        System.out.println("hello Wallpaper");
        loadPic(ClassLoader
                .getSystemResourceAsStream(DEFALUT_IMG));        
    }    
    static AlphaComposite alpha = AlphaComposite.getInstance(
            AlphaComposite.SRC_OVER, 0.2f);
    /**
     * @param gfx
     * @param width
     * @param height
     */
    public static void paintWallpaper(Graphics2D g, int cx, int cy, int width, int height, JComponent view) {
        if (pic==null){
            return;
        }
        int y = 0;
        int w = pic.getWidth();
        int h = pic.getHeight();
        Composite old = g.getComposite();
        g.setComposite(alpha);
        while (true) {
            int x = 0;
            while (true) {
                g.drawImage(pic, cx+x, cy+y, view);
                x += w;
                if (w <= 0 || x >= width) {
                    break;
                }
            }
            y += h;
            if (h <= 0 || y >= height) {
                break;
            }
        }
        g.setComposite(old);
    }
    /**
     * @param in
     */
    private static void loadPic(InputStream in) {
        try {
            pic = ImageIO.read(in);
        } catch (IOException e) {            
            e.printStackTrace();
        }
        
    }
    static File f;
    /**
     *
     */
    public static boolean changeWallpaper(JComponent parent) {
        JFileChooser jfc = new JFileChooser(f);
        int returnVal = jfc.showOpenDialog(parent);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            f = jfc.getSelectedFile();
            try {
                loadPic(new FileInputStream(f));
                return true;
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
        return false;
    }

}

4. copy default wallpaper whatever you like into org/gjt/sp/jedit/icons/wallpaper.jpg

5. add this into org\gjt\sp\jedit\actions.xml
<ACTION NAME="change-wallpaper">
    <CODE>
        textArea.changeWallpaperDialog();
    </CODE>
</ACTION>

6. change org\gjt\sp\jedit\jedit_gui.props, add "change-wallpaper" in tool bar
#{{{ Tool bar
view.toolbar=new-file open-file close-buffer save - print page-setup - \
    undo redo cut copy paste - find find-next - new-view unsplit \
    split-horizontal split-vertical - buffer-options global-options - \
    plugin-manager - help - change-wallpaper
...
...
...
change-wallpaper.icon=Help.png
....
....
change-wallpaper.label=Change $Wallpaper

7. last step, rebuild source, restart jedit, have fun.

notes: I don`t know if it is something slowdown, but I like it :)

本文地址:http://com.8s8s.com/it/it10655.htm