Como cambiar el Skin a tu aplicacion: Uso de Substance
Ya visitaste el nuevo blog?? www.quanaxoft.com/blog
A quienes han buscado la manera de cambiar la apariencia la interfaz gráfica de una aplicación hecha con swing de java, es decir, cambiarle el skin/tema a su aplicación, dejo el siguiente tutorial que hace uso de la libreria «Substance», un proyecto relativamente famoso y muy utilizado para el cambio de «Look and feel» pero con poca documentación en Español, es así que nos dimos un poco de tiempo para entender como aplicar algunas de sus funciones y publicárselos de la manera más sencilla con el afán de que les sea de utilidad.
Las versiones con las que se trabaja son: Substance 4.3, JDK 6 update 10 y Netbeans 6.5
1. Descargar Libreria y agregar al proyecto.
El primer paso es descargar la libreria del Substance 4.3 de https://substance.dev.java.net/servlets/ProjectDocumentList?folderID=9911&expandFolder=9911&folderID=9100 . Es un archivo .jar que pesa alrededor de 1.7Mb y que debemos de agregar a nuestro proyecto.
2. Aplicar los Skins de Substance
Existen varias formas de aplicar un Skin de substance. La manera mas sencilla de aplicarlo es desde la clase main antes de hacer la llamada a cualquier JFrame con las 2 siguientes sentencias:
JFrame.setDefaultLookAndFeelDecorated(true); //que nos permite dejar a Substance la decoracion ( por asi decirlo)
SubstanceLookAndFeel.setSkin(«org.jvnet.substance.skin.CremeSkin»); // Setencia que aplica el skin Creme de Substance
La lista de Skins para Substance 4.3 esta dada a continuación, así solo se debe cambiar el parametro a la funcion SubstanceLookAndFeel.setSkin() para aplicar el skin deseado:
– org.jvnet.substance.skin.AutumnSkin
– org.jvnet.substance.skin.BusinessBlackSteelSkin
– org.jvnet.substance.skin.BusinessBlueSteelSkin
– org.jvnet.substance.skin.BusinessSkin
– org.jvnet.substance.skin.CremeCoffeeSkin
– org.jvnet.substance.skin.CremeSkin
– org.jvnet.substance.skin.EmeraldDuskSkin
– org.jvnet.substance.skin.FieldOfWheatSkin
– org.jvnet.substance.skin.FindingNemoSkin
– org.jvnet.substance.skin.GreenMagicSkin
– org.jvnet.substance.skin.MagmaSkin
– org.jvnet.substance.skin.MangoSkin
– org.jvnet.substance.skin.MistAquaSkin
– org.jvnet.substance.skin.ModerateSkin
– org.jvnet.substance.skin.NebulaBrickWallSkin
– org.jvnet.substance.skin.NebulaSkin
– org.jvnet.substance.skin.OfficeBlue2007Skin
– org.jvnet.substance.skin.OfficeSilver2007Skin
– org.jvnet.substance.skin.RavenGraphiteGlassSkin
– org.jvnet.substance.skin.RavenGraphiteSkin
– org.jvnet.substance.skin.RavenSkin
– org.jvnet.substance.skin.SaharaSkin
3. Cambiar el Tema
El cambio de tema es como cambiar el skin pero Substance los maneja en otro paquete el cual nos proporciona otra lista de themes con una muy buena variedad de colores. La diferencia en su implentación es que va después de haber aplicado un skin o Look and feel y la sentencia que sebe aplicar es:
SubstanceLookAndFeel.setCurrentTheme( «org.jvnet.substance.theme.SubstanceAquaTheme» ); // Se aplica el tema Aqui de Substance
La lista de temas en Substance 4.3 es dada a continuación, de igual manera para cambiar de tema tan solo cambiar el String de parametro en la funcion SubstanceLookAndFeel.setCurrentTheme():
– org.jvnet.substance.theme.SubstanceAquaTheme
– org.jvnet.substance.theme.SubstanceBarbyPinkTheme
– org.jvnet.substance.theme.SubstanceBottleGreenTheme
– org.jvnet.substance.theme.SubstanceBrownTheme
– org.jvnet.substance.theme.SubstanceCharcoalTheme
– org.jvnet.substance.theme.SubstanceCremeTheme
– org.jvnet.substance.theme.SubstanceDarkVioletTheme
– org.jvnet.substance.theme.SubstanceDesertSandTheme
– org.jvnet.substance.theme.SubstanceEbonyTheme
– org.jvnet.substance.theme.SubstanceJadeForestTheme
– org.jvnet.substance.theme.SubstanceLightAquaTheme
– org.jvnet.substance.theme.SubstanceLimeGreenTheme
– org.jvnet.substance.theme.SubstanceNegatedTheme
– org.jvnet.substance.theme.SubstanceOliveTheme
– org.jvnet.substance.theme.SubstanceOrangeTheme
– org.jvnet.substance.theme.SubstancePurpleTheme
– org.jvnet.substance.theme.SubstanceRaspberryTheme
– org.jvnet.substance.theme.SubstanceSaturatedTheme
– org.jvnet.substance.theme.SubstanceSepiaTheme
– org.jvnet.substance.theme.SubstanceSteelBlueTheme
– org.jvnet.substance.theme.SubstanceSunGlareTheme
– org.jvnet.substance.theme.SubstanceSunsetTheme
– org.jvnet.substance.theme.SubstanceTerracottaTheme
4. Cambiar el Watermark
En el Watermark se permite cambiar el fondo/Background de los componentes contenedores en un JFrame o similares, desde el uso de watermarks predeterminados en Substance hasta colocar una imagen y cambiar los valores de transparencia de ésta. La Sentencia para aplicarlo es con la funcion setCurrentWatermark() de la clase SubstanceLookAndFeel:
SubstanceLookAndFeel.setCurrentWatermark(«org.jvnet.substance.watermark.SubstanceBinaryWatermark»);//Ejemplo de aplicacion de un watermark de Substance
La lista de Watermarks de Substance 4.3 es:
– org.jvnet.substance.watermark. SubstanceBubblesWatermark
– org.jvnet.substance.watermark. SubstanceBinaryWatermark
– org.jvnet.substance.watermark. SubstanceCopperplateEngravingWatermark
– org.jvnet.substance.watermark. SubstanceCrosshatchWatermark
– org.jvnet.substance.watermark. SubstanceFabricWatermark
– org.jvnet.substance.watermark. SubstanceGenericNoiseWatermark
– org.jvnet.substance.watermark. SubstanceImageWatermark
– org.jvnet.substance.watermark. SubstanceKatakanaWatermark
– org.jvnet.substance.watermark.SubstanceLatchWatermark
– org.jvnet.substance.watermark. SubstanceMagneticFieldWatermark
– org.jvnet.substance.watermark. SubstanceMarbleVeinWatermark
– org.jvnet.substance.watermark.SubstanceMazeWatermark
– org.jvnet.substance.watermark. SubstanceMetalWallWatermark
– org.jvnet.substance.watermark.SubstanceNoneWatermark
– org.jvnet.substance.watermark.SubstanceNullWatermark
– org.jvnet.substance.watermark. SubstancePlanktonWatermark
– org.jvnet.substance.watermark. SubstanceStripeWatermark
– org.jvnet.substance.watermark. SubstanceWoodWatermark
4.1 Watermak de imagen
Una función interesante es proporcionar una imagen propia para colocarlo de watermark en la aplicación; para esto utilizaremos el SubstanceImageWatermark instaciándolo y proporcionando la ruta de la imagen como parámetro.
SubstanceLookAndFeel.setCurrentWatermark( new SubstanceImageWatermark(«c:\\tuxx.jpg»));
4.1.1 Opacidad de la imagen
Substance también permite cambiar la opacidad de la imagen del watermark através de la función setImageWatermarkOpacity() al cual se debe pasar el valor en flotante entre 0 y 1, siendo 1 la opacidad nula.
SubstanceLookAndFeel.setImageWatermarkOpacity(new Float(0.3));//valor aproximado de la opacidad por default de imageWatermark
Opciones para Componentes.
Muchas opciones de Substance son para su aplicación a Componentes Swing específicos, aquí se verán algunass de ellas para Botones, Combobox, Tabpane y otras funciones que se pueden aplicarse a varios.
Botones.
5. Redondear los botones.
La propiedad de cliente BUTTON_SHAPER_PROPERTY de Substance permite cambiar la clasica forma rectangular del boton a una más redondeada que puede hacerlo resaltar más o hacerlo mas amigable, por ejemplo. La implementación se realiza desde la clase del JFrame (en mi caso la clase Ventana) en el constructor . Se debe pasar un objeto Shape que es la forma que tomará el boton y la cual proporcionara Substance: StandardButtonShaper que es un Shape que da redondeo al botón.
this.jButton1.putClientProperty( SubstanceLookAndFeel.BUTTON_SHAPER_PROPERTY, new StandardButtonShaper());
6. Lado de abertura de un botón
Permite que un cualquier lado de un boton esté abierto, es decir, acotado en espacio y borde de lado seleccionado: botton, left, up, right. La propiedad BUTTON_SIDE_PROPERTY acota el area de lado y BUTTON_OPEN_SIDE_PROPERTY elimina el borde de tal costado.
Ombre muchas gracias por el aporte desde Monteria – Cordoba – Colombia estube casi 4 meses buscando un tutorial sobre los Skins de Java y no habia podido encontrar gracias muchas gracias
esta bien chido esto, no sabia que se podia hacer eso con java, cambiar el look, lo malo es que al realizar mis proyectos uso los formularios de netbeans que tienen un buen de codigo y no pude hacer que funcionara, pero lo investigare y se si como se soluciona te lo comento.
gracias…
Que tal!, me da gusto que sea de utilidad para uds, la vdd es que Substance es una libreria con muchas configuraciones, y aun faltan muchas! espero volver a poster otras pocas mas en un futuro cercano, por lo mientras sigan comentando y aportando, Sldox!
Hola ! no sabes de la que me salvaste calberto gracias llevaba unbuen timpo buscando esto y menos mal encontre tu blog ,yo trabajo con formularios pero lo solucione,oe » skuarch » si todavia necesitas ayuda me puedes escribir a «gandalf_gris_89@hotmail.com» para enviarte la solucion (para leerlo ponle urgente java) bye saludos a todos.
gracias calberto ,crei que olvidaba lo mas importante!
Me da gusto que te sirviera y ojala pudieras compartir la solucion por aqui u otro medio para los que tienen un problema similar, por lo que veo eso de las plantillas genera problemas pero creo que viendo el codigo fuente podrian adaptarlo, de manera general lo que se hizo en el tutorial fue: Crear un nuevo proyecto en Netbeans (File>New Proyect>Java aplicacion) de la cual se genera la clase ‘main’; Se agrega un ‘JFrame Form’ al paquete del proyecto (que genera la clase con nombre Ventana en este caso), y desde ‘main’ crear la instancia tal como se muestra el la imagen ‘La manera mas facil de aplicar Substance’. El agregado de componentes a la ventana es independiete de cada aplicacion y el metodo ‘setVisible(true)’ yo lo pongo en el constructor de la clase Ventana, se ve en la imagen ‘Los parametros Substance los proporciona con SubstanceConstants’.
Sldox!
ok bueno , estoy acostumbrado a File>New Proyect>Java aplicacion pero desactivo el main class y le doy finish despues le agrego el JFrame Form… ahi por defecto aparece el «public static void main(String args[]) » y pues solo agregue lo de tu tutorial . abajo te dejo el codigo de algo simple que hice =)
//////////////////////////////////////
package Interface;
import org.jvnet.substance.SubstanceLookAndFeel;
import org.jvnet.substance.button.StandardButtonShaper;
import org.jvnet.substance.utils.SubstanceConstants;
public class Formulario extends javax.swing.JFrame
{
/** Creates new form Formulario */
public Formulario()
{
initComponents();
this.jButton2.putClientProperty(SubstanceLookAndFeel.BUTTON_SHAPER_PROPERTY, new StandardButtonShaper());
this.jButton2.putClientProperty(SubstanceLookAndFeel.BUTTON_SIDE_PROPERTY, SubstanceConstants.Side.RIGHT);
}
@SuppressWarnings(«unchecked»)
//
private void initComponents() {
jToolBar1 = new javax.swing.JToolBar();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenu3 = new javax.swing.JMenu();
jMenu5 = new javax.swing.JMenu();
jMenu2 = new javax.swing.JMenu();
jMenu4 = new javax.swing.JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jToolBar1.setRollover(true);
jButton1.setForeground(new java.awt.Color(255, 255, 255));
jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource(«/PaqueteFinal/folder_blue_parent.png»))); // NOI18N
jButton1.setText(«AbrirBase de Datos»);
jButton1.setFocusable(false);
jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
jButton1.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
jToolBar1.add(jButton1);
jButton2.setText(«Jose»);
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource(«/Interface/firefox_023.png»))); // NOI18N
jMenu1.setIcon(new javax.swing.ImageIcon(getClass().getResource(«/PaqueteFinal/folder_blue_mydocuments.png»))); // NOI18N
jMenu1.setText(«Archivo»);
jMenu3.setIcon(new javax.swing.ImageIcon(getClass().getResource(«/PaqueteFinal/folder_blue_explorer.png»))); // NOI18N
jMenu3.setText(«Open»);
jMenu5.setIcon(new javax.swing.ImageIcon(getClass().getResource(«/PaqueteFinal/folder_blue.png»))); // NOI18N
jMenu5.setText(«Folder»);
jMenu3.add(jMenu5);
jMenu1.add(jMenu3);
jMenuBar1.add(jMenu1);
jMenu2.setIcon(new javax.swing.ImageIcon(getClass().getResource(«/PaqueteFinal/folder_beige_scheduled_tasks.png»))); // NOI18N
jMenu2.setText(«Edicion»);
jMenu4.setIcon(new javax.swing.ImageIcon(getClass().getResource(«/PaqueteFinal/folder_blue_printer.png»))); // NOI18N
jMenu4.setText(«Copiar»);
jMenu2.add(jMenu4);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(674, Short.MAX_VALUE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 359, Short.MAX_VALUE)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pack();
}//
public static void main(String args[])
{
Formulario.setDefaultLookAndFeelDecorated(true);
SubstanceLookAndFeel.setSkin(«org.jvnet.substance.skin.RavenSkin»);
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
new Formulario().setVisible(true);
}
});
}
// Variables declaration – do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenu jMenu3;
private javax.swing.JMenu jMenu4;
private javax.swing.JMenu jMenu5;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JToolBar jToolBar1;
// End of variables declaration
}
/////////////////////
y eso fue todo….
bye saludos …
***porfavor****
si puedes sube un tuto de como conectar el MySQL con netbeans 6.1
con uso de tablas y toda la cosa
te lo agradeceria muxo….
ummmmm creo que tambien copie la parte del codigo que la maquina genera
package Interface;
import org.jvnet.substance.SubstanceLookAndFeel;
import org.jvnet.substance.button.StandardButtonShaper;
import org.jvnet.substance.utils.SubstanceConstants;
public class Formulario extends javax.swing.JFrame
{
/** Creates new form Formulario */
public Formulario()
{
initComponents();
this.jButton2.putClientProperty(SubstanceLookAndFeel.BUTTON_SHAPER_PROPERTY, new StandardButtonShaper());
this.jButton2.putClientProperty(SubstanceLookAndFeel.BUTTON_SIDE_PROPERTY, SubstanceConstants.Side.RIGHT);
}
public static void main(String args[])
{
Formulario.setDefaultLookAndFeelDecorated(true);
SubstanceLookAndFeel.setSkin(«org.jvnet.substance.skin.RavenSkin»);
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
new Formulario().setVisible(true);
}
});
}
lo que hice es solo esto by =).
sorry por el lapsus espero que e disculpen gracias bye y porfa lo de la base de datos .
Gracias por tu aporte JOse, para conectar una base de datos requieres el Driver Mysql y añadirlo a tu proyecto, para la ejecución de las querys encontre los links: http://jhodrickgg.wordpress.com/2007/11/30/conectar-mysql-a-java-netbeans/y meterte al manejo del Jtable, creo que podrias hallar otras varias soluciones en google. Sldox!
bueno gracias por tu apoyo ahora tratare de terminar mi tarea…
by saludos.
buenos días, he usado los metodos que has expuesto aquí, pero cuando se me cambio el aspecto de mi aplicación, tengo un problema, ya que los combos que tienen un desplegables con distintos valores cundo selecciono alguno, se me selecciona , pero aparece como si no he seleccionado nada, pero el valor está ahi, lo que pasa que no se ve, y no he conseguido dar con la solucion: si alguien sabe algo, porfavor contestarme en cuanto podais , un saludo
mmm eso lo responde carlberto… donde andara? jajaja
jajaj, que tal Youssef te pediriria que me proporciones el nombre del skin o theme de Substance que utilizas para verificar lo que te sucede y una breve descripcion de lo que hiciste con codigo, la vdd que no se que pueda ser. Sldox!
pues mira, he usado el Nimrod, he usado los que habeis proporcionado en esta pagina, en concreto el coffeCream Skin y otro mas, en el caso de Nimrod he probado con la sentencia en mi Main: UIManager.setLookAndFeel( new com.nilo.plaf.nimrod.NimRODLookAndFeel());
importando la libreria correspondiente. igual hice con el CoffeCream, pero me pasa lo mismo aunque en el caso del CoffeCream son mas lineas de codigo:
String path = PathUtil.packageToPath(«ruta de la clase LookAndFeel», «Nombre_del_Skin.zip»); SkinLookAndFeel.setSkin(SkinLookAndFeel.loadThemePack(this.getClass().getResource(path)));
UIManager.setLookAndFeel(new SkinLookAndFeel());
el problema es que con Nimrod me desaparecen los Combos, pero como sé donde estan los puedo seleccionar, pero no me aparece mi seleccion.
con los skins de esta pagina, me aparecen los combos, pero igualement no me aparece mi seleccion, he pensado en incluir alguna instruccion pero aplicando el skin en particular al combo igual que para el UIManagr. a ver que me podeis decir, gracias saludos.
Que tal youssef, hice unas pequenias pruebas con el skin para tratar de simular tu problema pero apesar de que cambie varias propiedades del combobox, el skin mantiene su aspecto y los items siguen viendose . Me parece que el problema es cuestion de las versiones que estas manejando (asegurate de usar Java 6) pues el problema lo tienes aun con dos librerias distintas o de la utilizacion del combo (asegurate de utilizar solo componentes swing en toda la aplicacion). Sugeriria tambien que hicieras un nuevo proyecto con nuevos componentes swing para ver si el alcance es solo de ese proyecto. Finalmente una manera mas facil de aplicar el Substance con el UIManager: UIManager.setLookAndFeel(«org.jvnet.substance.skin.SubstanceCremeCoffeeLookAndFeel»);
con sus respectivas capturas de excepciones, aunque sugiero y prefiero los metodos explicados en este post, al parecer mas limpios. Sldox!
Mira carlberto, tengo un problemilla.
Antes todo enhorabuena por la entrada, pues está genial y he conseguido usar el L&F.
Mi problema sucede por lo siguiente:
Dispongo de un sistema de 5 ventanas que cuando les aplico cualquier L&F su aspecto cambia en todas menos en la ventanas principal.
Ya he conseguido localizar el por qué de este problema. En dicha ventana, tengo una imagen en un label que, cada cierto tiempo esa imagen cambiará (es decir, que el propio programa hace las oportunas modificaciones a la imagen y la vuelve a cargar en el mismo label).
Dicha imagen tiene la opción debugGraphicsOptions con el parámetro FLASH_OPTION.
Si cambio este parámetro por el que está por defecto, NONE_OPTION, el problema desaparece, se aplica el L&F en la ventana, pero mi imagen ya no se cambia.
¿Sabrías como solucionar este pequeño problemilla?
Gracias
Hola mabril!, disculpa por hasta ahora responderte pero ya sabes como pasa de rapido el tiempo jejej, acerca del problema que me comentas intente hacer la prueba habilitando la opcion debugGraphicsOptions del label y efectivamente se genera una excepcion de casting; sinceramente no he trabajado con esta propiedad pero me parece que se trate de un bug de substance :s ya que con el «nimrod» (otro look and feel) no hay problema alguno. :Por el momento: solo puedo sugerirte que trates de realizar tu cargado de imagen por otro metodo o bien utilices otros skins, te dejo algunos links: nimrod: http://personales.ya.com/nimrod/index.html, este es un recopiltorio: http://www.javootoo.com/, espero te sirva de algo y en caso de arreglar tu problema compartas la solucion, Sldox!
Hola, quisiera agradecerte por tu post, he estado buscando por semanas como cambiarle la triste apariencia a la que java me tenia acostumbrado, ahora con esto mis proyectos se ven mucho mejor. Queria hacerte saber de un problema, no se si a alguien mas le paso, io trabajo con netbeans 6.5 y segui todos tus pasos para usar la libreria substance, mientras estoy en el entorno netbeans todo funciona bien, PERO cuando intento ejecutar el jar generado de mi proyecto desde la consola con : «java -jar proyecto.jar» , parece que substance no funciona muy bien, el renderizado de las pantallas y formularios es malo, no se actualizan cada ves que intento hacer un cambio , como presionar un boton o el simple hecho de mover un formulario, me manda errores en los que se repite el nombre de la clase substance, todo esto lo veo desde la consola, entonces queria saber si es un bug de la libreria o algo estoy haciendo mal, es poco probable que sea por que no adjunto las librerias, ya que tengo otras librerias agregadas al proyecto y funciona a las mil maravillas, quitando el hecho de que no se ven bien por el skin…Solo queria saber si me puedes ayudar con esto. y gracias una ves mas por tu tutorial
Esta muy bueno, felicito a la persona que haya puesto esto, ya tenia un buen rato buscando como cambiar la apariencia a mis aplicaciones java, ya que los que trae por defecto, bueno no tiene nada de malo pero todas las aplicaciones que hago pos tiene lo mismo y que como que se me hace muy aburrido y feo asi, pero ahora estara todo mas depejado jejejejeje, bueno os felicito y que pasen una bonito dia…….
Hola, oye tengo un problemita, yo utilizo linux y al querer poner una imagen de fondo me marca un error, seguramente la ruta esta mal, añadí la imagen al proyecto, segun yo con eso solo tengo que poner la imagen entre comillas y ya «imagen.jpg» pero no jala, igual y lo que no sé es como poner las rutas en el linux, nunca me había pasado creeras jiji, bueno ya intente con /home/yuliana/imagen.jpg y nada la neta si sabes como poner la ruta te lo agradeceria mucho, desde ya un saludote y mil gracias por el aporte que esta genial, me saco de un apuro 😛 , pero lo de la imagen seria la perfección. Ojala puedas ayudarme.
Hola Carlberto, estuve siguiendo tu post para utilizar los Skins de Substance sobre una aplicación que tengo que desarrollar y al parecer todo funcionaba bien, pero al probar completamente el sistema me sucedió lo siguiente.
Estoy desarrollando un chat simple mediante un applet, para ello utilizo un JList como un campo general para que allí lleguen los mensajes con su respectivo DefaultListModel para manipular así los mensajes de texto que lleguen del servidor, bueno hasta ahí todo bien pues si envío un mensaje me llega normalmente, pero si yo utilizo el método ensureIndexIsVisible (método que tiene como parámetro la longitud del DefaultListModel al receptar un mensaje) sobre el Jlist para que así el jlist se deslice hasta el último mensaje de texto recibido se produce el siguiente error:
java.lang.NullPointerException
at javax.swing.BufferStrategyPaintManager.flushAccumulatedRegion(BufferStrategyPaintManager.java:398)
at javax.swing.BufferStrategyPaintManager.copyArea(BufferStrategyPaintManager.java:326)
at javax.swing.RepaintManager.copyArea(RepaintManager.java:1232)
at javax.swing.JViewport.blitDoubleBuffered(JViewport.java:1604)
at javax.swing.JViewport.windowBlitPaint(JViewport.java:1573)
at javax.swing.JViewport.setViewPosition(JViewport.java:1118)
at javax.swing.JViewport.scrollRectToVisible(JViewport.java:415)
at javax.swing.JComponent.scrollRectToVisible(JComponent.java:3063)
at javax.swing.JList.ensureIndexIsVisible(JList.java:1118)
at cliente.EntradaCliente.run(EntradaCliente.java:92)
Exception in thread «AWT-EventQueue-1» java.lang.NullPointerException
at javax.swing.BufferStrategyPaintManager.flushAccumulatedRegion(BufferStrategyPaintManager.java:402)
at javax.swing.BufferStrategyPaintManager.endPaint(BufferStrategyPaintManager.java:362)
at javax.swing.RepaintManager.endPaint(RepaintManager.java:1281)
at javax.swing.JComponent._paintImmediately(JComponent.java:5076)
at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:803)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
Lo extraño es que este error no se registra en el primer mensaje recibido sino en el octavo o noveno mensaje recibido, te agradecería mucho que me ayudes con este problema, pues cuando le quito el uso del skin de substance de mi aplicación el sistema funciona correctamente.
buen tuto me ayudo de mucho gracias
Hola te fecilitto por tu blog, hay muchas personas con buenas intenciones de ayudar explicando un temas solo que no se explican bien, tu eres de los que explicas de una manera no complicada eso te lo agradesco.
Queria preguntarte algo
ya aplico bien el skin pero estoy utilizando windows y no me deja hacer referencia a la imagen de fondo del watermark, queria ver si me podias ayudar explicand como se hace paso a paso.
yo encontre este post en otro sitio.
allí explican como hacer un Jframe con fondo creo que deberia de funcionar pero no sé algo hago mal.
gracias.
gracias buen tutorial…solo una cosa al momento de aplicarlo me achica los JMenu de mi Menu Bar y sin el skin los coloca normal alguien tiene alguna idea de porque podra pasar ?
Buenas.. muchas gracias por el tutorial.. la verdad esta super interesante.. una pregunta.. no saben si este mismo metodo para cambiar el skin y demas tambien me sirve para el eclipse?? o se tiene que hacer de otra manera.. desde ya muchas gracias…
hola.. yo queria saber si estas librerias sirven tbn para la plataforma eclipse???
muchisimas gracias..
Substance contiene solo lo que has mostrado o hay mas????….
Hola gracias por el aporte, esta buenisimo bien explicado. Felicitaciones
Holas estoy usando una imagen como watermark perose me presenta el siguiente problema;si la imagen es muy grande no la toma y si es muy pequeña no se ve bien.
estoy usando el MAXIMIZED_BOTH para maximizar la ventana principal , alguien me puede ayudar necesito que la imagen abarque el tamaño de la ventana per no se como
Muchas gracias por el tutorial, ESTA MUY BUENO…
muy interesante su tutorial…
pero tengo un problema al parecer el link no esta habilitado para la decarga
de substance.jved pero ncontre uno de version 5.0
pero no tiene la opcion de .setcurrent y por ende no puedo cambiar el tema
agradeceria su repuesta 🙂
despues de mucho investigar encontre la solucion al gran problema..para quienes les interese..pues cuando se quiera agregar el efecto substance al jar pues tienen que modificar el archivo manifest(Meta-Inf) que hay dentro del jar , teniendo esta forma:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Main-Class: ClasePrincipal(Aqui va la localizacion de su clase Principal MainClass)
Class-Path: lib/substance.jar
Created-By: 14.2-b01 (Sun Microsystems Inc.)
Gracias por tu aporte ..Bye
Hola…gracias por este enorme aporte para todos…mi problema es que no me jala el skin si lo pongo en el main…al llamar la ventana me marca errores
java.lang.IllegalStateException: This method must be called on the Event Dispatch Thread
at org.jvnet.substance.SubstanceLookAndFeel.setSkin(SubstanceLookAndFeel.java:1954)
at org.jvnet.substance.SubstanceLookAndFeel.setSkin(SubstanceLookAndFeel.java:2060)
at org.jvnet.substance.SubstanceLookAndFeel.setSkin(SubstanceLookAndFeel.java:2097)
at mercado.Main.main(Main.java:26)
este es mi main
package mercado;
import form.*;
import javax.swing.JFrame;
import org.jvnet.substance.*;
/**
*
* @author Eduardo
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true); //que nos permite dejar a Substance la decoracion ( por asi decirlo)
SubstanceLookAndFeel.setSkin(«org.jvnet.substance.skin.RavenSkin»); // Setencia que aplica el skin Creme de Substance
new vta().setVisible(true);
//JFrame.setDefaultLookAndFeelDecorated(true); //que nos permite dejar a Substance la decoracion ( por asi decirlo)
//SubstanceLookAndFeel.setSkin(«org.jvnet.substance.skin.RavenSkin»); // Setencia que aplica el skin Creme de Substance
//vta ventana=new vta();
//ventana.show(true);
//ventana.setvisible(true);
// TODO code application logic here
}
}
esos comentarios son algunas cosas que trate de hacer pero ninguna funco…
lo unico que si sale… es que si pongo los skins en los constructores de los JDialog que tengo ahi si se cambia el skin y tmb el de la ventana principal…
alguna solucion?
Muchas gracias por el tutorial, muy buena pagina…
desde chile
bye bye
oye me pueden pasar el proyecto paraejecutarlo en el Netbeans 6.5
Excelente solución, me funcionó perfectamente en Netbeans 6.7.1 Muchas gracias
Gracias amigo por la información, excelente aporte!
esta bueno el tutorial, pero quisiera ver mas ejemplos de como cambiar otros componentes aparte de los botones.
y ademas como ajustar una imagen de fondo al tamaño de la ventana.
muchas gracias!
Muchisimas gracias, justo lo que estaba buscando para mejorar el Look & Feel de mi aplicación.
Que bien!!!
funciona al 190%, gracias man
amigoo, e intentado mucho pero no me agarra el — .set — me marca error
ni me deja importar las librerias. no me da opcion i si las escibo todas asi me dice q no se usan nunca
este es mi codigoo
JFrame.setDefaultLookAndFeelDecorated(true);
// //que nos permite dejar a Substance la decoracion ( por asi decirlo)
SubstanceLookAndFeel.setSkin(«org.jvnet.substance.skin.BusinessBlackSteelSkin»);
// // Setencia que aplica el skin Creme de Substance
SubstanceLookAndFeel.setSkin(«org.jvnet.substance.skin.RavenSkin»);
//CON ESTO CAMBIAMOS EL TEMAA DE LA APLICACION
SubstanceLookAndFeel.setCurrentTheme( «org.jvnet.substance.theme.SubstanceAquaTheme» );
// Se aplica el tema Aqui de Substance
//ESTO CAMBIA EL WATERMARK (fondo del JFame)
SubstanceLookAndFeel.setCurrentWatermark(«org.jvnet.substance.watermark.SubstanceBinaryWatermark»);
//Ejemplo de aplicacion de un watermark de Substance
gracias por su tutorial es de gran ayudaa
Great !!!
me sale el sgte errorr.
Exception in thread «main» java.lang.ClassCastException: org.pushingpixels.substance.internal.plugin.BaseSkinPlugin cannot be cast to org.jvnet.substance.plugin.SubstanceSkinPlugin
es primera ves que bisito esta web y si encontre lo que buscaba gracias por el material
ok. te agradezco estaba buscando un buen tutorial.
Este look & feel no me abre el cuadro de impresoras en linux alguien sabe porque? y como solucionarlo? , pues con otros look & feel si abre el problemas nada mas es con el Substance, gracias de antemano
Muy Buno, justo lo q buscaba…lo mejor..Funciona!!
Hola, esta muy bueno el blog mira tengo un problema con algunos de los elementos de la swingx-20007, el problema es que substance no soporta jXTaskPaneContainer, si me pudieras ayudar gracias si no tambien
este es mi e-mail jorleohp@hotmail.com puedes escribirme.
nuevamente gracias
Muy buena esta infor, me dio muchas ideas para un proyecto en el cual estoy trabajando, es un buen material
oye carnal esta muy padre tu aporte pero podrias enviarme la paqueteria a mi correo esk la pagina oficial esta desabilitada y no encuentro el substance por ningun lado este es mi correo antoni_anemi@hotmail.com muchas gracias de antemano
Ese mi richi! mira… google ya manda a tu blog xD
Buenas, quisiera saber como hago para quitarle el theme ó en su caso el skin a un componente, es decir, tengo un JDateChooser que al aplicarle el skin el mismo se desconfigura, y quisiera setear el theme o skin a este componente.
Gracias por la ayuda que me pudieran ofrecer.
Hola,gracias a este blog pude cambiar mi apariencia de interfaz de usuario, pero tengo un problema al pasarle la direccion de la imagen, aqui esta el codigo
SubstanceLookAndFeel.setCurrentWatermark( new SubstanceImageWatermark(«c:\\imagen.jpg»));
el problema radica que cuando me llevo mi proyecto para otra pc pierde la referencia de la direccion que le puse anteriormente
soy nuevo en java queria saber por que me aparece el error en el org (subrayado en rojo ) imorte el JAR hice los pasos que aparecian anteriormente pero nada
Muy buen aporte, ya das más ideas de como decorar una aplicación de escritorio en java, muy buen apoyo…
EXCELENTE APORTE, FELICIDADES Y GRACIAS A LA VEZ..
La verdad me ayudo bastante, Te mando un gran abrazo y un saludos desde México…