Criação de aplicações desktop

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:

http://www.randelshofer.ch/quaqua/download.html

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?

Apostaria no substance

[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!!!

:wink:

Gerson, mas uma dúvida… Sobre os componentes entendi blz, agora a questão é com o Frame principal, como faz pra customizar ele?