package tirateima.gui.arquivos; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import javax.swing.border.AbstractBorder; @SuppressWarnings("serial") public class FileBorder extends AbstractBorder{ private String titulo; private Font fonte; private Color color; private Color cor_titulo; /** Espaço vertical entre o a linha do componente e o texto. */ public static final int ESP_VERT = 2; /** Largura da linha exterior desenhada. */ public static final int LARG_LINHA = 2; /** Fonte padrão a ser usada no título. */ public static final Font FONTE_PADRAO = tirateima.gui.Constantes.FONTE_TITULO; /** Cor padrão a ser usada na borda. */ public static final Color COR_PADRAO = new Color(50, 100, 255); /** Cor padrão do título. */ public static final Color COR_TITULO = Color.black; /** * Cria uma nova FileBorder. * * @param titulo Título a ser mostrado na borda. * @param fonte Fonte a ser usada no título. * @param color Cor da borda. * @param cor_titulo Cor do título. */ public FileBorder(String titulo, Font fonte, Color color, Color cor_titulo){ super(); setTitulo(titulo); setFonte(fonte); setCorBorda(color); setCorTitulo(cor_titulo); } /** * Cria uma nova FileBorder com cor de título padrão. * * @param titulo Título a ser mostrado na borda. * @param fonte Fonte a ser usada no título. * @param color Cor da borda. */ public FileBorder(String titulo, Font fonte, Color color){ this(titulo, fonte, color, null); } /** * Cria uma nova FileBorder com cores de fundo e de título padrão. * * @param titulo Título a ser mostrado na borda. * @param fonte Fonte a ser usada no título. */ public FileBorder(String titulo, Font fonte){ this(titulo, fonte, null, null); } /** * Cria uma nova FileBorder com valores padrão. * * @param titulo Título a ser mostrado na borda. */ public FileBorder(String titulo){ this(titulo, null, null, null); } /** * Cria uma nova FileBorder com valores padrão. * * @param titulo Título a ser mostrado na borda. * @param c Cor desta borda. */ public FileBorder(String titulo, Color c){ this(titulo, null, c, null); } /** * Cria uma nova FileBorder com valores padrão e título vazio. */ public FileBorder(){ this(null, null, null, null); } /** * Define o tamanho e a largura da fonte * * @param c: variável da classe Component * @return Insets object (altura e largura da linha) */ public Insets getBorderInsets(Component c){ int altura_fonte = c.getFontMetrics(fonte).getHeight(); altura_fonte /= getTitulo().equals("") ? 2 : 1; int altura = 2 * LARG_LINHA + 2 * ESP_VERT + altura_fonte; return new Insets(altura, LARG_LINHA, LARG_LINHA, LARG_LINHA); } public Insets getBorderInsets(Component c, Insets insets){ Insets ins = getBorderInsets(c); insets.bottom = ins.bottom; insets.left = ins.left; insets.right = ins.right; insets.top = ins.top; return ins; } public void paintBorder(Component c, Graphics g, int x, int y, int width, int height){ Insets insets = getBorderInsets(c); Graphics2D g2d = (Graphics2D) g; /* Desenha o fundo. */ int largura = c.getWidth(); int altura = c.getHeight(); g2d.setColor(getCorBorda()); g2d.fillRoundRect(0, 0, largura, altura, 7, 7); largura = c.getWidth() - insets.left - insets.right; altura = c.getHeight() - insets.bottom - insets.top; g2d.setColor(c.getBackground()); g2d.fillRoundRect(insets.left, insets.top, largura, altura, 7, 7); /* Se necessário, desenha o título. */ if(!getTitulo().equals("")){ FontMetrics fm = c.getFontMetrics(getFont()); int base = fm.getAscent() + fm.getLeading() + fm.getDescent(); g2d.setColor(getCorTitulo()); g2d.setFont(getFont()); g2d.drawString(getTitulo(), 3, base); } } public String getTitulo(){ return titulo; } public Font getFont(){ return fonte; } public Color getCorBorda(){ return color; } public Color getCorTitulo(){ return cor_titulo; } public void setTitulo(String titulo){ this.titulo = new String(titulo == null ? "" : titulo); } public void setFonte(Font fonte){ this.fonte = fonte == null ? FONTE_PADRAO : fonte; } public void setCorBorda(Color color){ this.color = color == null ? COR_PADRAO : color; } public void setCorTitulo(Color cor_titulo){ this.cor_titulo = cor_titulo == null ? COR_TITULO : cor_titulo; } }