Olá pessoal, gosto muito de desenvolver aplicações swing, mas agora estou querendo desenvolver algo com uma aparência
mais arrojada. Queria saber como se controi um frame sem a barra de título padrão do sistema operacional, não tenho ideia de
como funciona isto, mas não é com Look and Feel. Alguém poderia me dar uma dica?
Customize componentes swing para agilizar o trabalho, nao customize layout.
Quer layout bonito? use um pronto.
Esse aqui é fantástico:
Valeu, vou dar uma olhada.
Muito obrigado!!!
Ok, este Look&Feel eu ja tinha usado, muito massa mesmo…
mas como vc disse, como eu customizo os componentes?
[quote=danyelsanches]Ok, este Look&Feel eu ja tinha usado, muito massa mesmo…
mas como vc disse, como eu customizo os componentes?[/quote]
Com o básico de herança ja ajuda bastante.
Não é melhor em vez de ficar setando todos as propriedades dos JTextFields 1 a 1 :roll:, criar um SuaEmpresaTextField, que herda de JTextField, e adiciona essas características?
Entao nos seus JPanels e JInternalFrames vc usa SuaEmpresaTextField, e não JTextField.
E nao mexe em mais nada.
O mesmo vale para tabelas, painéis, dialogs, botoes, inputVerifiers e bláblabla.
Necessariamento vc nao precisa criar novos componentes para fazer uma personalização de seu sistema.
Vc pode trabalhar do mesmo modo que os Look & Feels fazem.
Por exemplo, vc pode criar um L&F para os JButton e deixar padrão para todo o sistema, extendendo uma classe de BasicButtonUI e fazendo as personalizações necessarias, e dai relacionar o UIManager que esta classe sera a padrão para JButton assim:
UIManager.put("ButtonUI","caminho.da.classe.ClasseUI")
A maioria dos L&F sao open-source, entao vc pode baixar um exemplo e ver como que eles personalizam cada componente.
Qualquer coisa estou as ordem
flw
valeu dimais… vou dar uma estudada nisso!!! Obrigado
So mais uma coisa, usar canvas é uma boa pra fazer esse tipo de personalização?
Necessariamente se vc quizer personalizar o componente, vc vai ter que “desenhar” td o q vc quizer fazer.
Abaixo vai um codigo de personalizacao de L&F do JButton em um estilo “parecido” com os botões do Office 2007
import java.awt.Color;
import java.awt.Cursor;
import java.awt.FontMetrics;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicButtonUI;
import javax.swing.plaf.basic.BasicHTML;
import javax.swing.text.View;
import sun.swing.SwingUtilities2;
public class BotaoUI extends BasicButtonUI
{
private static BotaoUI buttonUI = new BotaoUI();
private MouseAdapter mouseadapter;
private static Rectangle viewRect = new Rectangle();
private static Rectangle textRect = new Rectangle();
private static Rectangle iconRect = new Rectangle();
public static ComponentUI createUI(JComponent c)
{
return buttonUI;
}
@Override
protected void installDefaults(AbstractButton b)
{
super.installDefaults(b);
b.setBorderPainted(false);
b.setOpaque(false);
b.setCursor(new Cursor(Cursor.HAND_CURSOR));
}
@Override
protected void installListeners(AbstractButton b)
{
super.installListeners(b);
mouseadapter = new MouseAdapter()
{
public void mouseEntered(MouseEvent e)
{
AbstractButton b = (AbstractButton) e.getSource();
b.getModel().setArmed(true);
}
public void mouseExited(MouseEvent e)
{
AbstractButton b = (AbstractButton) e.getSource();
b.getModel().setArmed(false);
}
};
b.addMouseListener(mouseadapter);
}
@Override
protected void uninstallListeners(AbstractButton b)
{
super.uninstallListeners(b);
b.removeMouseListener(mouseadapter);
mouseadapter = null;
}
@Override
public void paint(Graphics g, JComponent c)
{
int curva = 8;
AbstractButton b = (AbstractButton) c;
ButtonModel model = b.getModel();
Graphics2D graph = (Graphics2D)g;
graph.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Color corfundo;
Color corcontorno;
if (model.isArmed() && model.isPressed() || b.isSelected())
corfundo = new Color(243,139,42);
else if (b.isFocusPainted() && b.isEnabled() && (model.isArmed() || b.isFocusOwner()))
corfundo = new Color(255,213,69);
else
corfundo = b.getBackground();
corcontorno = corfundo.darker();
int height = (int)(b.getHeight()*0.48);
graph.setColor(corfundo);
graph.fillRoundRect(0,0,b.getWidth()-1,b.getHeight()-1,curva,curva);
graph.setPaint(new GradientPaint(50,0,new Color(255,255,255,(model.isPressed() || b.isSelected() ? 150 : 255)),
50,height,new Color(255,255,255,(model.isPressed() || b.isSelected() ? 50 : 100)),true));
graph.fillRoundRect(0,0,b.getWidth(),height,curva,curva);
height = b.getHeight() - (int)(b.getHeight()*0.4);
graph.setPaint(new GradientPaint(50,height,new Color(255,255,255,0),
50,b.getHeight()-height,new Color(255,255,255,100),true));
graph.fillRoundRect(0,height,b.getWidth(),b.getHeight()-height,curva,curva);
if (model.isArmed() && model.isPressed() || b.isSelected())
{
graph.setPaint(new GradientPaint(50,0,new Color(120,120,100,255),
50,(int)(b.getHeight() * 0.05),new Color(120,120,120,0),true));
graph.fillRoundRect(0,0,b.getWidth()-1,(int)(b.getHeight() * 0.05),curva,curva);
graph.setPaint(new GradientPaint(50,0,new Color(50,50,50,255),
50,b.getHeight()-1,new Color(50,50,50,0),true));
graph.drawRoundRect(0,0,b.getWidth()-1, b.getHeight()-1,curva,curva);
}
else
{
graph.setColor(corcontorno);
graph.drawRoundRect(0,0,b.getWidth()-1, b.getHeight()-1,curva,curva);
}
String text = layout(b, SwingUtilities2.getFontMetrics(b, g),
b.getWidth(), b.getHeight());
clearTextShiftOffset();
if(b.getIcon() != null)
paintIcon(g,c,iconRect);
if (text != null && ! text.equals(""))
{
View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null)
v.paint(g, textRect);
else
paintText(g, b, textRect, text);
}
graph = null;
}
private String layout(AbstractButton b, FontMetrics fm, int width, int height)
{
Insets i = b.getInsets();
viewRect.x = i.left;
viewRect.y = i.top;
viewRect.width = width - (i.right + viewRect.x);
viewRect.height = height - (i.bottom + viewRect.y);
textRect.x = textRect.y = textRect.width = textRect.height = 0;
iconRect.x = iconRect.y = iconRect.width = iconRect.height = 0;
// layout the text and icon
return SwingUtilities.layoutCompoundLabel(
b, fm, b.getText(), b.getIcon(),
b.getVerticalAlignment(), b.getHorizontalAlignment(),
b.getVerticalTextPosition(), b.getHorizontalTextPosition(),
viewRect, iconRect, textRect,
b.getText() == null ? 0 : b.getIconTextGap());
}
}
Dê uma analisada neste código que vc vai entender como que funciona o resto
flw
Obrigado, vai ajudar muito mesmo. vou analizar mesmo.
Valew
Fiz um teste aqui Gerson, funcionou beleza, era isso que eu queria… obrigado a todos!!!
Gerson, mas uma dúvida… Sobre os componentes entendi blz, agora a questão é com o Frame principal, como faz pra customizar ele?