跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

Design skinnable Java UIs for media players with native performance

skindemo

package test;
/**
 * <p>Title: Java JNI Skin Client</p>
 * <p>Description: GTK based JNI classes for advanced UI design</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author Vladimir Silva
 * @version 1.0
 */
import java.util.StringTokenizer;
import jni.skin.slik.*;
import jni.skin.slik.evt.*;
import jni.skin.slik.widget.*;
importjni.skin.util.Debug;
public final class SkinDemo implements
    WindowEventListener, ButtonEventListener,
    ListEventListener, DialEventListener,
    SliderEventListener, MenuEventListener
{
    // for debugging...
    public static final String COMPONENT_NAME = "SkinDemo";
    private GtkSkin skin = null;
    private int skinHandle = -1;
    private String skinPath = null;
    private final String appID = "SkinDemo";
    // debug
    private int _debugJNI = GtkSkin.GTK_FALSE;
    private boolean _debugJAVA = false;
    // Some widgets
    WList playList = null;
    WNumber numSong = null;
    WNumber totSong = null;
    WDial position = null;
    WSlider volume = null;
    WMenu popup = null;
    private void Usage() {
        System.out.println("Usage:\n\tjava " + this.getClass().getName() + " -skin <PATH_TO_SKIN> [-debug jni,SinDemo,GimpSkin]");
        System.out.println("\t<PATH_TO_SKIN> must be a directory.\n");
    }
    /*
     * Parse cmd line args
     */
    private boolean parseArgs(String[] args )
    {
        if ( args.length == 0 )
            return false;
        for (int i = 0; i < args.length; i++) {
            // System.out.println("args[" + i + "]=" + args[i]);
            if ( args[i].equalsIgnoreCase("-skin") ) {
                skinPath = args[++i];
            }
            else if (args[i].equalsIgnoreCase("-debug") )
            {
                StringTokenizer st = new StringTokenizer(args[++i], ",");
                // parse dbg flags
                while (st.hasMoreTokens() ) {
                    String tok = st.nextToken();
                    // enable JNI debug
                    if ( tok.equalsIgnoreCase("jni") ) {
                        _debugJNI = GtkSkin.GTK_TRUE;
                    }
                    else  {
                        // enable debug
                        Debug.addComponent(tok);
                    }
                }
            }
            else {
                return false;
            }
        }
        return true;
    }
    /*
     * Main function
     */
    public SkinDemo(String[] args) throws GtkSkinException
    {
        if ( ! parseArgs(args) ) {
            Usage();
            System.exit(1);
        }
        // init gtk (create skin window) + JNI debug flag (TRUE/FALSE)
        skin = new GtkSkin(appID, _debugJNI);
        // Init all widgets: for skin demo purposes (Widgets typically initialized when needed...)
        skin.initAllWidgets();
        skinHandle = skin.getSkinHandle();
        // Create and register some widgets
        // See the SPEC file for details
        // example: [button_exit], [list_playlist], [number_song], ....
        // IMPORTANT: All widgets must exist in SPEC file
        // Widget data (imgs, lbls, etc. are defined in the spec file
        skin.registerWidget(new WText("title"), "Title goes here!");
        skin.registerWidget(new WButton("exit"));
        skin.registerWidget(new WButton("iconify"));
        skin.registerWidget(new WButton( "play"));
        skin.registerWidget(new WButton("pause"));
        skin.registerWidget(new WButton("stop"));
        skin.registerWidget(new WButton("prev"));
        skin.registerWidget(new WButton("next"));
        // listen for btn events
        WButton.addButtonEventListener(this);
        // more widgets (IMPORTANT All widgets must exist in SPEC file)
        playList = new WList("playlist") ; //, skin.getSkinHandle());
        playList.addListEventListener(this);
        skin.registerWidget(playList);
        numSong = new WNumber("song");
        totSong = new WNumber("song_total");
        skin.registerWidget(numSong, new Integer(10));
        skin.registerWidget(totSong, new Integer( 5));
        // dial widget
        position = new WDial("position");
        position.addDialListener(this);
        skin.registerWidget(position);
        // slider test
        volume = new WSlider("volume");
        volume.addSliderListener(this);
        skin.registerWidget(volume);
        // popup menu
        String [] menus = {
              "Menu 1" + WMenu.SUBMENU_DIVIDER + "S_ubmenu-11" + WMenu.SUBMENU_DIVIDER + "Submenu-12",
              "Option2" + WMenu.SUBMENU_DIVIDER + "Option21" + WMenu.SUBMENU_DIVIDER + WMenu.MENU_DIVIDER + WMenu.SUBMENU_DIVIDER + "Option31" ,
              WMenu.MENU_DIVIDER,
              "option3",
              "option4"
              };
        popup = new WMenu("popup", menus, skinHandle);
        popup.addMenuListener(this);
        skin.registerWidget(popup, menus);
        /**
         * Listen for Skin Window main evts: KeyPress, Mouse motion & Mouse BTN press
         */
        skin.addWindowEventListener(this);
        // load & show
        skin.loadSkin(skinPath);
        skin.show();
    }
    /*
     * GimpWindow events
     */
    public void OnKeypress(int keyval, int state, int time) {
        Debug.debug(COMPONENT_NAME,"OnKeypress key val: " + keyval + " state:" + state + " time: " + time);
    }
    public void OnMouseMotion(int mousex , int mousey) {
        // Debug.debug(COMPONENT_NAME,"OnMouseMotion x: " + mousex + " y: " + mousey);
    }
    public void OnMouseButtonPressed(int btn)
    {
        // Fires when mouse btn clicked...
        Debug.debug(COMPONENT_NAME,"OnMouseButtonPressed btn: " + btn);
        // popup main menu
        popup.popup();
    }
    /*
     * Button widgets evets: GimpButtonEventListener
     */
    public void OnButonClicked(String buttonKey) {
        /* Fires when any BTN is clicked */
        Debug.debug(COMPONENT_NAME,"OnButonClicked key: " + buttonKey);
        if ( buttonKey.equalsIgnoreCase("exit") ) {
            skin.close();
            GtkSkin.GTKQuit();
        }
        if ( buttonKey.equalsIgnoreCase("iconify") ) {
            skin.iconify();
        }
        // demo: switch skin when play is pressed
        if ( buttonKey.equalsIgnoreCase("play") )
            skin.openSkinEditor();
        if ( buttonKey.equalsIgnoreCase("pause") ) {
            float pos1 = position.valueGet();
            Debug.info(COMPONENT_NAME, "SkinDemo: Dial " + position.getKey()+  " value: " + pos1);
            skin.spawnChild("AChild","skindata");
        }
        if ( buttonKey.equalsIgnoreCase("stop") ) {
            // Insert some dummy vals into list
            // Note: Keys are defined in SPEC file
            String[] keys = {"title", "time"};
            int x = (int)(100 * Math.random());
            String[] vals = {"title-" + x , "time-" + x};
            playList.rowInsert("playlist", keys , vals );
        }
        if ( buttonKey.equalsIgnoreCase("prev") ) {
            skin.openSkinFileBrowser();
        }
        if ( buttonKey.equalsIgnoreCase("next") ) {
            // set number widget vals...
            numSong.valueSet((int)(Math.random() * 99));
            totSong.valueSet(numSong.valueGet() + 5 );
        }
    }
    public void OnDialDragged(String wkey, float value) {
        System.out.println("SkinDemo: Dial dragged val: " + value);
    }
    public void OnSliderDragged(String wkey, float value) {
        System.out.println("SkinDemo: Slider dragged val:" + value);
    }
    /*
     * list evts: GimpListEventListener
     */
    public void OnListClicked(String lkey, int row, int mousebtn) {
        String val = playList.rowGetText(lkey, row, 1);
        Debug.info(SkinDemo.COMPONENT_NAME, "key: " + lkey + " row: " + row + " btn: " + mousebtn + " val1: " + val);
    }
    /**
     * Fires when a menu/popup is activated
     * @param label Label of the menu activated
     */
    public void OnMenu(String label) {
        Debug.info(COMPONENT_NAME, "OnMenuClicked Label: " + label);
    }
    /**
     * Main Sub
     * @param args args
     */
    public static void main(String[] args) {
        try {
            SkinDemo demo = new SkinDemo(args);
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Return to article.