Design e forma de uma frame

15 respostas
ECO2004

Olá…estou efetuando uma pesquisa onde vou fazer a comunicação do computador à um dispositivo eletrônico, como tv, videocassete/dvd player…o controle será feito a partir de um controle remoto desenvolvido em Java, usando porta USB…até ai tudo perfeito…mas eu queria que o visual de meu controle remoto não ficasse “quadrado”…gostaria de modelar a frame…deixar os cantos arredondados…etc…Alguém sabe como fazer isso? Teria que olhar no código fonte da JFrame e modifica-la? Vlw e flw

15 Respostas

alessandro.fawkes

meu amigo, não conheço muito a respeito, mas isso você muda através dos LookandFeel, tem vários gratuitos por aí.

Dá uma pesquisada: LookandFeel

Se achar algo, comente aqui.

ECO2004

Então…look and feel muda apenas a aparência dos componentes…mas o formato mesmo de uma Frame eu nunca vi…porém, já vi aplicativos em outras linguagem com formatos bem diferentes…vou continuar a pesquisar, mas o mais provável é que eu tenha que olhar no código fonte de JFrame e tentar muda-la.

M

eae mano, tu descobriu como fazer isso? Tambem to interessado :slight_smile: Vlw.

Danieru

tá faltando gente q sabe aqui nesse forúm :stuck_out_tongue:
o povo pede algo com jframe só fazem recomendar LAF sem nem ter usado ¬_¬

F

Vc pode utilizar uma imagem sobre o Frame caso vc queria algo mais artistico e colocar icones nos JButtons, assim vc pode ter um visual mais sofisticado e atraente.

Caso vc queria somente mudar a aparencia da aplicacao para parecer com Windows o Mac ai sim vc utiliza o LookAndFeel, nao tem misterio, nao tem segredo.

ECO2004

Na verdade, o que queria mesmo é mudar a forma. Look and Feel não muda a forma, só a aprência. E o que que tem a ver o LAF com isso?

Danieru

Pois é.Eu vim atrás de informações sobre layouts do JFrame e só vejo o pessoal indicando LAF ¬¬

Look and Feel é aparência como Metal ou GtK

daniel.lopes

Danieru:
Pois é.Eu vim atrás de informações sobre layouts do JFrame e só vejo o pessoal indicando LAF ¬¬

Look and Feel é aparência como Metal ou GtK

Tu quer saber sobre:

GridLayout
GridBagLayou
FlowLayout
BorderLayout
CardLayout
etc etc??

Vou procurar aqui nos maus favoritos alguns links interessantes e logo mais posto… Não estou na minha maquina no momento…

[]s

davidbuzatto

Olá.

Como vc já notou, o LaF vai mudar a forma dos componentes que são 100% Swing, ou seja, que não são amarrados diretamente ao sistema operacional. Por exemplo, um JButton é um componente “totalmente” escrito em Swing (conhecidos como componentes “peso leve”), sendo assim, a forma dele pode ser alterada.

O Java precisa utilizar alguns componentes do sistema operacional como base, por exemplo um JFrame. Esses componentes baseados nos componentes do SO não podem ser alterados simplesmente usando um LaF, pois isso é problema do SO e não do Java.

Outras linguagens podem alterar o layout de uma janela do windows ou do linux pois elas usam a API de janelamento do SO diretamente e não um kit de janelamento a parte como o swing.

Os componentes AWT são peso pesados, sendo assim, baseados (acho que todos, não tenho certeza) em componentes do SO. Se você conseguir encontrar um modo de alterar isso usando AWT e não swing talvez funcione, mas acho que talvez seja perda de tempo.

Você pode desenvolver sua GUI em outra linguagem e então usar algum método para comunicar com a camada da lógica da aplicação que vai ser feita em Java, como por exemplo usando JNI.

Tentei explicar de forma simples, mas existem muitos detalhes, não é algo tão simples.

Dê uma pesquisada sobre como o swing funciona para vc ter uma idéia melhor do que eu falei.

Até mais!

Danieru

É disso mesmo que eu estava atrás.Muito obrigado,se puder posta os links ai :wink:

M

Entao vc quer dizer q eh impossivel alterar o layout de um jframe via java? E o estilo delas pelo menos, eh possivel? Pq tem LAFs q fazem isso, como o metal, e alguns open source q acha ai na net, e nao me parece q eles fazem isso via outra linguagem. Uma das opcoes para alterar o layout de componentes q eu vi no forum foi usando o synth, muito bom e facil de usar, porem me pareceu um pouco limitado. Eu vejo projetos de lafs e vejo q so usam classes, e o synth usa um xml. Como poderia entao fazer o q esses lafs fazem?^Se eu conseguir alterar o jframe pelo menos como o laf lipstik q eh open source, eu ja tava satisfeito.

davidbuzatto

Acho que não me fiz entender...

Vc altera o layout dos componentes, mas uma janela, que é ligada diretamente ao SO vc não consegue alterar a barra de título, dexando ela arredondada por exemplo.

É quase o que você precisa... Tentei de toda forma deixar o fundo do JFrame invisível, mas não consegui... Precio pesquisar um pouco e fazer mais tentativas.. Enfim, olha ai o código... Vc vai ter que implementar o drag do JFrame, definindo áreas que podem ser clicadas e arrastadas.. Botão de fechar, etc...

/**
 * @(#)Teste.java
 *
 *
 * @author David Buzatto
 * @version 1.00 2008/1/28
 */

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class Teste {

    public static void main( String[] args ) {
        
        MeuFrame f = new MeuFrame();
        f.setSize( 300, 300 );
        f.setVisible( true );
        
    }
    
    
}

class MeuFrame extends JFrame {
    
    public MeuFrame() {
        
        setUndecorated( true );
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
                
        setBackground( new Color( 255, 255, 255, 0 ) );
        
        add( new MeuPainel() );
        
            
    }
    
}

class MeuPainel extends JPanel {
    
    public MeuPainel() {
        setBackground( new Color( 0, 0, 0, 0 ) );
    }
    
    protected void paintComponent( Graphics g ) {
        
        super.paintComponent( g );
        
        Graphics2D g2d = ( Graphics2D ) g;
        
        g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, 
            RenderingHints.VALUE_ANTIALIAS_ON  );
        
        g2d.setColor( new Color( 200, 0, 0, 100 ) );
        
        g2d.fill( new RoundRectangle2D.Double( 0, 0, 
            getParent().getWidth(), getParent().getHeight(), 
            20, 20 ) );
        
    }
    
}

Até mais!

ECO2004

Quando disse “deixar a frame invisível”, não quis dizer “setVisible(false)”, mas siim somente a barra onde ficam os botões “fechar, maximizar e minimizar”. Faça isso usando, se estiver no construtor (classe derivada de um JFrame) this.setUndecorated(false);”

daniel.lopes

Danieru:
daniel.lopes:

Tu quer saber sobre:

GridLayout
GridBagLayout
FlowLayout
BorderLayout
CardLayout
etc etc??

É disso mesmo que eu estava atrás.Muito obrigado,se puder posta os links ai ;)

Carma que meus favoritos estão um tanto que bagunçados… mas to postando…

Esse é simples e funcional:
http://www.macs.hw.ac.uk/guidebook/?name=Layouts&page=6

Esse é maneiro e tem muitas idéias interessantes:
http://www.java2s.com/Code/Java/Swing-JFC/Layout.htm

Algumas outras informações consegui em pedaços de apostilas, muito mau escritas.

Sou iniciante em programação e também em java, claro. Estou escrevendo uma aplicaçãozinha em Swing que tem JFrame, uma porrada de JPanels, Menu, Janelas de mensagens de erro, comunicação com sql2000 e etc…

Há uma pessoa me ajudando com esse projetinho didático e tem sido bem proveitoso.

No que puder ajudar, ou trocar idéias!!!

[]s

digolipertte

Oi pessoal acho que da para resolver com o look and feel.
Também estou pesquisando isso, mas achei algo interesante.
http://www-128.ibm.com/developerworks/java/library/j-iframe/

Criado 13 de setembro de 2007
Ultima resposta 22 de set. de 2008
Respostas 15
Participantes 8