lunes, 29 de julio de 2013

JButtonTrans añade a tus proyectos java un JButton transparente en java


Ya tenia mucho tiempo que no posteaba nada referente a java, hoy les traigo un JButton modificado totalmente translucido y no muy difícil de lograr.
para modificar o personalizar cualquier Objeto que nos ofrece java necesito la utilizar la claseGraphics2D , lo que eh hecho para modificar el JButton es primero eliminar el fondo y el borde por defecto deshabilitar el focus o rollover(efecto que se muestra al pasar el mouse) llamando a los siguientes métodos.
  • setContentAreaFilled(false);
  • setFocusPainted(false);
  • setBorderPainted(false);
  • setOpaque(false);

con estos métodos tendré un JButton transparente en su totalidad pero aun no tiene el efecto que necesito asi que utilizo la interfazShape que me permite dibujar una forma en este caso quiero que se dibuje un rectángulo con bordes redondeados para ello necesito construir y llamar a la claseRoundRectangle2D esta clase me recibe 6 valores los dos primero las coordenadas X y Y luego el ancho(Width) y alto(Height) que tendra el boton y por ultimo dos valores que serán el radio o los valores para redondear las esquinas.

Shape area = new RoundRectangle2D.Float(x, y, w-1, h-1, getRadioButton(), getRadioButton());

de esta forma tendré dibujado en mi botón un rectángulo con bordes redondeados, ahora para pintar el JButton necesito definir o declaras 4 variables Color donde cada una tendrá valores flotantes del 0 al 1 estos valores serán los colores translucidos donde tendré que combinarlos para formar un gradiente, para eso necesito pintar al JButton con el métodosetPaint() un gradiente es decir tendré que construir o llamar ala claseGradientPaint esta clase me permita pintar o dibujar un gradiente recibiendo las coordenadas X y Y del botón mas los colores.

protected void paintComponent(Graphics g) { int x = 0; int y = 0; int w = getWidth(); int h = getHeight(); Graphics2D g2 = (Graphics2D)g.create(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Shape area = new RoundRectangle2D.Float(x, y, w-1, h-1, getRadioButton(), getRadioButton()); color_1 = color_trans_1; color_2 = color_trans_2; ButtonModel m = getModel(); if(m.isPressed()) { /**SI EL BUTON FUE PRESIONADO*/ color_1 = color_trans_4; color_2 = color_trans_3; }else if(m.isRollover()) { /*****SI PASA POR ENCIMA*****/ color_1 = color_trans_3; color_2 = color_trans_4; } /*****creo un gradiente*******/ g2.setPaint(new GradientPaint(x, y, color_1, x, y+h, color_2, true)); g2.fill(area); g2.setPaint(color_trans_2); g2.draw(area); g2.dispose(); super.paintComponent(g); }

Tambien para dar un efecto mas notable hago uso de un Modelo del JButton,llamo a la claseButtonModel para detectar cuando el boton fue presionado o el cursor esta encima de boton de esta forma puedo cambiar los colores y dar otro efecto.

les dejo el codigo fuente completo.


DESCARGAR


1 comentario: