lunes, 26 de noviembre de 2007

JPanel Redondeado


En una entrega anterior se vio como crear un panel semitransparente la cual era una clase que hereda de JPanelRound aqui esta el codigo fuente de este panel que tiene las esquinas redondeadas:



import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.RenderingHints; import java.awt.geom.RoundRectangle2D;
import javax.swing.JPanel;

/**
*
* @author Edisoncor
*/
public class JPanelRound extends JPanel{

private Color colorPrimario = new Color(0x666f7f);
private Color colorSecundario = new Color(0x262d3d);
private Color colorContorno = new Color(0x262d3d);
private int arcw=20;
private int arch=20;

public JPanelRound() {
super();
setOpaque(false);
}


@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);


Paint oldPaint = g2.getPaint();
RoundRectangle2D.Float r2d = new RoundRectangle2D.Float(
0,0,getWidth(),getHeight()-1,getArcw(),getArch());
g2.clip(r2d);
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColorPrimario().darker(),
0.0f, getHeight(),getColorSecundario().darker()));
g2.fillRect(0,0,getWidth(),getHeight());

g2.setStroke(new BasicStroke(4f));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColorContorno(),
0.0f, getHeight(), getColorContorno()));
g2.drawRoundRect(0, 0, getWidth()-2 , getHeight() -2, 18, 18);

g2.setPaint(oldPaint);
super.paintComponent(g);
}

public Color getColorPrimario() {
return colorPrimario;
}

public void setColorPrimario(Color colorPrimario) {
this.colorPrimario = colorPrimario;
}

public Color getColorSecundario() {
return colorSecundario;
}

public void setColorSecundario(Color colorSecundario) {
this.colorSecundario = colorSecundario;
}

public Color getColorContorno() {
return colorContorno;
}

public void setColorContorno(Color colorContorno) {
this.colorContorno = colorContorno;
}

public int getArcw() {
return arcw;
}

public void setArcw(int arcw) {
this.arcw = arcw;
}

public int getArch() {
return arch;
}

public void setArch(int arch) {
this.arch = arch;
}
}


Aqui vamos a observar que se definen los siguientes atributos:



  • colorPrimario que va a representar el color de la parte superior del Panel


  • colorSecundario representa el color de la parte inferior del panel


  • colorContorno el color alrededor del panel


  • arcw representa el angulo horizontal y


  • arch que representa el angulo vertical para el Panel

Crear Un Panel transparente



Hola amigos luego de una ausencia(por motivos laborales) estoy de nuevo aqui para escribir un nuevo tema en esta ocaci'on vamos a crea un panel ue va a tener un aspecto semitransparente

El panel va a quedar de esta forma:

El codigo fuente para crearlo es package swingec.panel;
Nota la clase JPanelRound la encontramos aqui:

import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

/**
*
* @author Edisoncor
*/
public class JPanelTransparente extends JPanelRound{



private float tran= 0.8f;

public JPanelTransparente(){

}


@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
AlphaComposite old = (AlphaComposite) g2.getComposite();
g2.setComposite(AlphaComposite.SrcOver.derive(getTran()));
super.paintComponent(g);
g2.setComposite(old);
}

public float getTran() {
return tran;
}

public void setTran(float tran) {
this.tran = tran;
}

}

Donde la variable tran representa el nivel de transparencia que se desea para el panel, tambien podemos observar

AlphaComposite old = (AlphaComposite) g2.getComposite(); que salve la composicion actual del panel, luego
g2.setComposite(AlphaComposite.SrcOver.derive(getTran())); le damos la nueva informacion para el panel

jueves, 8 de noviembre de 2007

Crear un JButton redondeado y personalizado


Hola amigos en esta oportunidad voy a crear un Boton muy perzonalizado y con algunos efectos


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.RenderingHints;
import java.awt.geom.RoundRectangle2D;
import javax.swing.ButtonModel;
import javax.swing.JButton;
/**
*
* @author Edisoncor
*/
public class Button extends JButton{
private Color color1 = new Color(0×666f7f);
private Color color2 = new Color(0×262d3d);
private Color color3 = new Color(0×262d3d);

public Button() {
setOpaque(false);
setContentAreaFilled(false);
setForeground(Color.WHITE);
setFocusPainted(false);
setBorderPainted(false);
}
protected void paintComponent(Graphics g) {
Color c1,c2,c3;
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
ButtonModel m = getModel();
Paint oldPaint = g2.getPaint();
if (m.isArmed()){
c2=color1.darker();
c1=color2.darker();
c3=color3;
}else{
c1=color1.darker();
c2=color2.darker();
c3=color3.brighter();
}
if (!m.isEnabled()){
c2=color1.brighter();
c1=color2.brighter();
c3=color3.darker();
}
RoundRectangle2D.Float r2d = new RoundRectangle2D.Float(
0,0,getWidth(),getHeight()-1,20,20);
g2.clip(r2d);
g2.setPaint(new GradientPaint(0.0f, 0.0f, c1,
0.0f, getHeight(), c2));
g2.fillRect(0,0,getWidth(),getHeight());
g2.setStroke(new BasicStroke(4f));
g2.setPaint(new GradientPaint(0.0f, 0.0f, c3,
0.0f, getHeight(), c3));
g2.drawRoundRect(0, 0, getWidth()-2 , getHeight() -2, 18, 18);
g2.setPaint(oldPaint);
super.paintComponent(g);
}
public Color getColor1() {
return color1;
}
public void setColor1(Color color1) {
this.color1 = color1;
}
public Color getColor2() {
return color2;
}
public void setColor2(Color color2) {
this.color2 = color2;
}
public Color getColor3() {
return color3;
}
public void setColor3(Color color3) {
this.color3 = color3;
}
}y el resultado es

JTextField con Imagen y redondeado


Hola a todos de nuevo me encuentro aqui, en esta oportunidad vamos desarrollar un JTextField al cual le podamos añadir una imagen, y ademas va a estar redondeado, el codigo para desarrollarlo es asi:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Paint;
import java.awt.geom.RoundRectangle2D;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
/**
*
* @author Edisoncor
*/
public class JERoundTextField extends JTextField{
private int arcw=20;
private int arch=20;
private Image image=null;
private Icon icon;

public JERoundTextField() {
setOpaque(false);
setBorder(new EmptyBorder(0,5,0,2));
setPreferredSize(new Dimension(100,20));
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Paint oldPaint = g2.getPaint();
RoundRectangle2D.Float r2d = new RoundRectangle2D.Float(
0,0,getWidth(),getHeight(),arcw,arch);
g2.clip(r2d);
g2.setPaint(new GradientPaint(0.0f, 0.0f, getBackground(),
0.0f, getHeight(), getBackground()));
g2.fillRect(0,0,getWidth(),getHeight());
if(getImage()!=null){
g2.drawImage(getImage(), 5, 2, getHeight()-3, getHeight()-3, null);
setBorder(new EmptyBorder(0,(int)(getHeight()*1.2),0,2));
}
g2.setPaint(new GradientPaint(0.0f, 0.0f, Color.BLACK,
0.0f, getHeight(), Color.BLACK));
g2.drawRoundRect(0, 0, getWidth(), getHeight(), arcw, arch);
g2.setPaint(oldPaint);
super.paintComponent(g);
}
public int getArcw() {
return arcw;
}
public void setArcw(int arcw) {
this.arcw = arcw;
}
public int getArch() {
return arch;
}
public void setArch(int arch) {
this.arch = arch;
}
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
public Icon getIcon() {
return icon;
}
public void setIcon(Icon icon){
this.icon=icon;
setImage(((ImageIcon)icon).getImage());
}
}

aqui podemos ver una demostracion de como quedaria el JTexfield

JPanel con Imagen


Hola a todos el dia de hoy vooy a crear un jpanel al cual lo podemos personalizar con una imagen, y luego sobre este panel tu puedes agregar los componentes swing que desees, para esto vamos a sobreescribir el metodo paintComponent
el codigo esta aqui




import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JPanel;/**
*
* @author Edisoncor
*/
public class JEImagePanel extends JPanel{
private Image image=null;
private Icon icon;
/** Creates a new instance of JEImagePanel */
public JEImagePanel() {
}
protected void paintComponent(Graphics g) {
Graphics2D g2 =(Graphics2D) g;
if(getImage()!=null)
g2.drawImage(getImage(), 0, 0, getWidth(), getHeight(), null);
}
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
public Icon getIcon() {
return icon;
}
public void setIcon(Icon icon){
this.icon=icon;
setImage(((ImageIcon)icon).getImage());
}
}


esta clase tu la puedes agregar a la paleta de componentes de Netbeans e ir a la propiedad Icon y ahi elegir la imagen que desees agregarle.