giovedì 3 marzo 2011

JPanel con contorni a gradiente

Un pannello in Java dotato di bordi destro e sinistro con una sfumatura a gradiente di 10px.
Per un utilizzo corretto, occorre aggiungere un bordo "vuoto" di 10px affinchè il contenuto del pannello non si sovrapponga alla banda colorata:

pannelloConGradiente.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 10, 1, 10));

Per ottenere un bordo più o meno denso, basta parametrizzare lo spessore.

import javax.swing.JPanel;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;

public class PanelWithBorder extends JPanel
{
 protected void paintComponent( Graphics g )
 {
  if ( !isOpaque( ) )
  {
   super.paintComponent( g );
   return;
  }

  Graphics2D g2d = (Graphics2D)g;
  int w = getWidth( );
  int h = getHeight( );

  Color color1 = getBackground( );
  Color color2 = color1.darker( );

  GradientPaint gpSxBorder = new GradientPaint(0, 0, color2, 10, 0, color1 );
  GradientPaint gpDxBorder = new GradientPaint(w-10, 0, color1, w, 0, color2 );

  g2d.setPaint( gpSxBorder);
  g2d.fillRect( 0, 0, 10, h );

  g2d.setPaint( gpDxBorder );
  g2d.fillRect( w-10, 0, w, h );

  setOpaque( false );
  super.paintComponent( g );
  setOpaque( true );
 }
}

Nessun commento: