?? nimrodlookandfeel.java
字號:
/* * (C) Copyright 2005 Nilo J. Gonzalez * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser Gereral Public Licence as published by the Free * Software Foundation; either version 2 of the Licence, or (at your opinion) any * later version. * * This library is distributed in the hope that it will be usefull, but WITHOUT ANY * WARRANTY; without even the implied warranty of merchantability or fitness for a * particular purpose. See the GNU Lesser General Public Licence for more details. * * You should have received a copy of the GNU Lesser General Public Licence along * with this library; if not, write to the Free Software Foundation, Inc., 59 * Temple Place, Suite 330, Boston, Ma 02111-1307 USA. * * http://www.gnu.org/licenses/lgpl.html (English) * http://gugs.sindominio.net/gnu-gpl/lgpl-es.html (Espa駉l) * * * Original author: Nilo J. Gonz醠ez * * And, last but not least, these people improved the code: * Fritz Elfert * Eduardo * */ /** * The main class for the NimROD Look&Feel. * To use this Look&Feel, simply include these two lines into your code:<br> * <code> * NimRODLookAndFeel NimRODLF = new NimRODLookAndFeel(); * </code> * You can change the default theme color in two ways. * * You can create theme and change de colours with this lines:<br> * <code> * NimRODLookAndFeel NimRODLF = new NimRODLookAndFeel(); * NimRODTheme nt = new NimRODTheme(); * nt.setX( Color); * .... * nt.setX( Color); * NimRODLF.setCurrentTheme( nt); * UIManager.setLookAndFeel( NimRODLF); * <code><br> * This way is good if you can change the sources and you want the program works *only* with NimRODLF. * * If you don't have the sources you can change the theme color including same properties in your command line and the look and feel * will do its best... This couldn't work if the application changes the system properties, but, well, if you don't have the sources...<br> * For example:<br> * <code>java -Dnimrodlf.selection=0x00cc00 XXX.YOUR.APP.XXX</code> will colour with green the selected widgets<br> * <code>java java -Dnimrodlf.s1=0xdde8ee -Dnimrodlf.s2=0xb7daec -Dnimrodlf.s3=0x74bfe6 XXX.YOUR.APP.XXX</code> will colour with blue the background of the widgets<br> * The values are in the tipical HTML format (0xRRGGBB) with the red, green and blue values encoded in hexadecimal format.<br> * These are the admited properties: * <ul> * <li>nimrodlf.selection: this is the selection color</li> * <li>nimrodlf.background: this is the background color</li> * <li>nimrodlf.p1: this is the primary1 color (緿on't you understand? Patience?</li> * <li>nimrodlf.p2: this is the primary2 color</li> * <li>nimrodlf.p3: this is the primary3 color</li> * <li>nimrodlf.s1: this is the secondary1 color</li> * <li>nimrodlf.s2: this is the secondary2 color</li> * <li>nimrodlf.s3: this is the secondary3 color</li> * <li>nimrodlf.b: this is the black color</li> * <li>nimrodlf.w: this is the white color</li> * <li>nimrodlf.menuOpacity: this is the menu opacity</li> * <li>nimrodlf.frameOpacity: this is the frame opacity</li> * </ul> * 縋rimary color? 縎econdary? 縒hat the...? Cool. <a href='http://java.sun.com/products/jlf/ed1/dg/higg.htm#62001'>Here</a> you can learn what * i'm talking about. Swing applications have only 8 colors, named PrimaryX, SecondaryX, White and Black, and <a href='http://java.sun.com/products/jlf/ed1/dg/higg.htm#62001'>here</a> * you hava a table with the who-is-who.<br> * You don't need to write all the values, you only must write those values you want to change. There are two shorthand properties, selection and background. * If you write nimrodlf.selection or nimrodlf.background the NimRODLF will calculate the colors around (darker and lighter) your choose.<br> * If nimrodlf.selection is writen, pX, sX, b and w are ignored. * Ahh!! One more thing. 0xRRGGBB is equal #RRGGBB. * @see NimRODTheme * @see http://java.sun.com/products/jlf/ed1/dg/higg.htm#62001 * @author Nilo J. Gonzalez */ package com.nilo.plaf.nimrod;import java.awt.*;import java.awt.image.Kernel;import javax.swing.*;import javax.swing.plaf.*;import javax.swing.plaf.metal.*;import java.io.*;import java.util.*;public class NimRODLookAndFeel extends MetalLookAndFeel { private static final long serialVersionUID = 7191199335214123414L; String fichTheme = ""; protected static MetalTheme theme; public NimRODLookAndFeel() { super(); NimRODTheme nt = new NimRODTheme(); String p1, p2, p3, s1, s2, s3, selection, background, w, b, opMenu, opFrame; // Vamos a ver si han puesto por linea de comandos un fichero de tema... // Este codigo esta aqui gracias a Fritz Elfert, que descubrio que esto cascaba miserablemente // cuando se usaba en un applet. String nomFich = null; try { nomFich = System.getProperty( "nimrodlf.themeFile"); } catch ( Exception ex) { // If used in an applet, this could throw a SecurityException. } // ... o tenemos que tirar del fichero por defecto nomFich = ( nomFich == null ? "NimRODThemeFile.theme" : nomFich); try { Properties props = new Properties(); InputStream res = null; try { res = new FileInputStream( nomFich); // Primero, se carga el fichero } catch ( Exception ex) { nomFich = ( nomFich.equals( "NimRODThemeFile.theme")? "/" + nomFich : nomFich); res = this.getClass().getResourceAsStream( nomFich); // Si no hay fichero, se busca en el classpath/jar } props.load( res); // Si no esta en ningun sitio, esto dara una excepcion y cargara uno por defecto selection = props.getProperty( "nimrodlf.selection"); background = props.getProperty( "nimrodlf.background"); p1 = props.getProperty( "nimrodlf.p1"); p2 = props.getProperty( "nimrodlf.p2"); p3 = props.getProperty( "nimrodlf.p3"); s1 = props.getProperty( "nimrodlf.s1"); s2 = props.getProperty( "nimrodlf.s2"); s3 = props.getProperty( "nimrodlf.s3"); w = props.getProperty( "nimrodlf.w"); b = props.getProperty( "nimrodlf.b"); opMenu = props.getProperty( "nimrodlf.menuOpacity"); opFrame = props.getProperty( "nimrodlf.frameOpacity"); nt = NimRODUtils.iniCustomColors( nt, selection, background, p1, p2, p3, s1, s2, s3, w, b, opMenu, opFrame); fichTheme = nomFich; } catch ( Exception ex) { // Si no se puede leer el fichero o el fichero esta malamente, nt = new NimRODTheme(); // no le hacemos ni caso. } try { // Ahora vamos a ver si se expecifican los colores por linea de comandos. selection = System.getProperty( "nimrodlf.selection"); background = System.getProperty( "nimrodlf.background"); p1 = System.getProperty( "nimrodlf.p1"); p2 = System.getProperty( "nimrodlf.p2"); p3 = System.getProperty( "nimrodlf.p3"); s1 = System.getProperty( "nimrodlf.s1"); s2 = System.getProperty( "nimrodlf.s2"); s3 = System.getProperty( "nimrodlf.s3"); w = System.getProperty( "nimrodlf.w"); b = System.getProperty( "nimrodlf.b"); opMenu = System.getProperty( "nimrodlf.menuOpacity"); opFrame = System.getProperty( "nimrodlf.frameOpacity"); nt = NimRODUtils.iniCustomColors( nt, selection, background, p1, p2, p3, s1, s2, s3, w, b, opMenu, opFrame); } catch ( Exception ex ) { // Este codigo esta aqui gracias a Fritz Elfert, que descubrio que esto cascaba miserablemente // cuando se usaba en un applet. Un gran tipo Fritz... if ( fichTheme.length() == 0 ) { nt = new NimRODTheme(); } } setCurrentTheme( nt); float[] elements = new float[NimRODUtils.MATRIX_FAT*NimRODUtils.MATRIX_FAT]; for ( int i = 0; i < elements.length; i++ ) { elements[i] = 0.1f; } int mid = NimRODUtils.MATRIX_FAT/2+1; elements[mid*mid] = .2f; NimRODUtils.kernelFat = new Kernel( NimRODUtils.MATRIX_FAT,NimRODUtils.MATRIX_FAT, elements); elements = new float[NimRODUtils.MATRIX_THIN*NimRODUtils.MATRIX_THIN]; for ( int i = 0; i < elements.length; i++ ) { elements[i] = 0.1f; } mid = NimRODUtils.MATRIX_THIN/2+1; elements[mid*mid] = .2f; NimRODUtils.kernelThin = new Kernel( NimRODUtils.MATRIX_THIN,NimRODUtils.MATRIX_THIN, elements); } public String getID() { return "NimROD"; } public String getName() { return "NimROD"; } public String getDescription() { return "Look and Feel NimROD, by Nilo J. Gonzalez 2005-2007"; } public boolean isNativeLookAndFeel() { return false; } public boolean isSupportedLookAndFeel() { return true; } /** * Este metodo devuelve false porque para dar bordes como es debido a la ventana principal hay que * fusilarse la clase MetalRootPaneUI enterita porque la mayoria de sus metodos son privados... * Ademas, no es mala idea que la decoracion de la ventana principal la ponga el sistema operativo * para que sea igual que todas (y si tiene transparencias, mejor) */ public boolean getSupportsWindowDecorations() { return false; } /* Esta mierda es debida a que quiero que esto funcione en la version 1.4 de Java y ademas, que el sitio adecuado para dejar la transparencia de los menus es el theme. Bueno, pues en la version 1.4 eso no se puede hacer, porque la funcion getCurrentTheme es privada de MetalLookAndFeel, asi que no hay manera de saber que tema se esta usando y por tanto no se puede recuperar la opacidad (ni ninugna otra caracteristica de los temas que no sea estandar). Asi que hay que replicar la funcion setCurrentTheme aqui, guardar el tema en una variable local y devolverlo despues en la funcion getOpacity
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -