Swing tudo na unha

30 respostas
R

Pessoal gostaria de algumas opiniões, trabalho com java e uso o netbeans há 02 anos para JSE, apesar de gostar mais do eclipse por umas e outras que não curto no netBeans, que também não posso reclamar pois já me ajudou e muito, estou com idéia de fazer meus projetos tudo no código mesmo, pois posso usar o eclipse ou qualquer outra IDE sem me prender em alguns plugins, pois tentei usar o VE mais não curti achei muito lento.

Alguém aqui trabalha com Swing tudo na unha ? Conseguiram algumas técnicas para tornar-se produtivo, principalmente em projeto grande ?

se puderem opinar agradeço.

abraço

30 Respostas

M

Costume e um bom entendimento de LayoutManagers tornam programar tudo na unha produtivo.

Minha dica, MigLayout.

L

Amigo trabalho com Swing no eclipse, só que utilizando o VE.
Fazer uma aplicação real na mão duvido muito que alguem faça.

Sobre o VE ser pior q o matisse não concordo considero muito superior, pelo codigo que ele gera, mesmo sendo mais lento é um ótimo plugin

V

Eu usei o http://designgridlayout.java.net/usage.html e me deixo muito feliz trabalhei com as telas na mão mesmo !

C

Faça tudo “na unha”. Tenha “domínio” do que você faz, nem que custe um alguns minutos a mais desenvolvendo.

Em projetos grandes, talvez, em algum momento, você terá que fazer manutenção do código, fazer alguns refactor e dai aquele código feito pelo netbeans vai dar problema. Ainda mais com componentes adicionados a paleta, e que ficam com o código tudo travado, vai te incomodar.

Faz na mão, e com a prática você se tornará produtivo.

R

cawink:
Faça tudo “na unha”. Tenha “domínio” do que você faz, nem que custe um alguns minutos a mais desenvolvendo.

Em projetos grandes, talvez, em algum momento, você terá que fazer manutenção do código, fazer alguns refactor e dai aquele código feito pelo netbeans vai dar problema. Ainda mais com componentes adicionados a paleta, e que ficam com o código tudo travado, vai te incomodar.

Faz na mão, e com a prática você se tornará produtivo.

Na verdade eu tenho um sistema grande que fiz tudo usando netbeans e realmente aquele código travado irrita um pouco, alguma vezes precisei fazer override em código que o netBeans cria e por esses dias comecei a praticar o código na unha e vi que dá pra se organizar bem, o que você falou é verdade vou precisar de bastante prática e me organizar bem.

S

Uso o netbeans só para aplicações desktop e não me importo com o código gerado por ele, nunca me deu problema,
para web eu acho melhor o eclipse.

R

Aconselho a utilização do GridBagLayout, pois funciona como uma tabela. Os componentes podem ocupar mais de uma célula, podem ser alinhados às margens da célula, etc. Essas características são conhecidas como restrinções (GridBagConstraints). E também o GridBagLayout é considerado como um dos gerenciadores de layout mais flexíveis e complexos que a plataforma Java oferece.

C

O código gerado automagicamente funciona perfeitamente, nem discuto isso.

Mas como falei, para fazer manutenções, grandes refactores, talvez ocorra alguns problemas, devidos aqueles arquivos .form que tem por baixos dos panos e que fazem a magia toda funcionar com o .java.

Já passamos por isso aqui na empresa, com refactores de pacotes no netbeans. Esses malditos .form nos custaram algumas semanas a mais de trabalho.

Por isso que aconselho fazer na mão.

M

O MigLayout é a evolução dos layouts em Grid.

Eu já fiz um sistema razoavelmente grande tudo na mão, e não me arrependi disso.

V

O maior problema nem são os refactorings.
São quando vc esbarra em código que deve gerar conteúdo dinâmico. Coisas como ter na tela um número de checkboxes que venha do banco, ou abrir uma aba num formulário para cada cliente. Muita gente descobre a importância de conhecer Swing (e não só matisse ou VE) quando vem um requisito desse tipo. Aí, talvez, seja tarde demais para evitar as horas extras e a pizza durante a noite na empresa.

L

Ia criar um tópico para falar mais ou menos sobre isso, mas vou aproveitar essa.

Atualmente trabalho somente em ambiente web, mas teve um módulo de um sistema que tive que fazer desktop, em Swing.

Eu sempre gostei ( e defendi) de programar na unha, como está no titulo, estudei os layout manager e sobre swing em geral.

Mas neste projeto utilizei o Windows Builder Pro da google (plugin do Eclipse) e ele está muuito destruidor!!

Ele é demais, parece que os códigos foram escritos na mão.

I

++!

Ainda acho que programar na mão te garante uma segurança(e independência!) que as IDE´s não são capazes de te garantir(ainda!).

++!No início, eu usava o formslayout, mas o miglayout evoluiu ainda mais, e hoje é o meu “padrão” de codificação de grids.Simplesmente excelente.

Ainda não o utilizei, mas tenho acompanhado sua evolução.Não gosto dos setBounds da vida, e adoraria um dia que a IA dessas ferramentas conseguirem “adivinhar” uma dada posição e utilizar o máximo possível de um layout sem uma posição definida(absoluta) na tela.

D

Muito bom este tópico!

Eu precisava ler sobre isso realmente, pois SÓ CONSIGO FAZER GUI no netbeans :frowning: E isso está me deixando MUITO frustrado … muito mesmo… Eu ja tentei usar na unha, comecei com flowlayout, gridlayout e minhas GUIs ficaram HORRÍPILENTAS … Muitoo feias mesmo … Então o conselho geral da galera é usar o MigLayout ?

Preciso aprender… Urgente a fazer minhas próprias GUI na mão … Então a duvida seria, por onde começar?

Obrigado desde já pela opinião de todos que já postaaram…

L

d34d_d3v1l:
Muito bom este tópico!

Eu precisava ler sobre isso realmente, pois SÓ CONSIGO FAZER GUI no netbeans :frowning: E isso está me deixando MUITO frustrado … muito mesmo… Eu ja tentei usar na unha, comecei com flowlayout, gridlayout e minhas GUIs ficaram HORRÍPILENTAS … Muitoo feias mesmo … Então o conselho geral da galera é usar o MigLayout ?

Preciso aprender… Urgente a fazer minhas próprias GUI na mão … Então a duvida seria, por onde começar?

Obrigado desde já pela opinião de todos que já postaaram…

Existem excelentes (e paginosos) livros sobre Swing.
http://www.amazon.com/Swing-Beginners-Guide-Osborne-Mcgraw/dp/[telefone removido]/ref=sr_1_1?ie=UTF8&qid=[telefone removido]&sr=8-1
http://www.amazon.com/Filthy-Rich-Clients-Developing-Applications/dp/[telefone removido]/ref=sr_1_5?ie=UTF8&qid=[telefone removido]&sr=8-5
http://www.amazon.com/Up-Speed-Swing-Steven-Gutz/dp/[telefone removido]/ref=sr_1_16?s=books&ie=UTF8&qid=[telefone removido]&sr=1-16
http://www.amazon.com/Professional-Java-Interfaces-Mauro-Marinilli/dp/[telefone removido]/ref=sr_1_14?s=books&ie=UTF8&qid=[telefone removido]&sr=1-14

inclusive existe um link com livro gratuito sobre Swing, com Sources. Se lembrar eu posto.

A

Oi,

Legal mesmo esse tópico, estou precisando dar um tempinho pro Netbeans também.
Nesse link tem uma apostila muito boa, quem se interessar é só baixar…http://www.apostilaspdf.com/apostila-manual-interface-grafica-java/

R

Pessoal muito obrigado pelas dicas.

Anime, muito boa apostila do pdf, tem bastante conteúdo. Valeu

A

rogerio3d:

Anime, muito boa apostila do pdf, tem bastante conteúdo. Valeu

Por nada… :stuck_out_tongue:

E

Bem cara, as dicas que eu posso te dar:

  1. Evite Border Layout e Flowlayout. Eles dão muita dor de cabeça com múltiplas resoluções

  2. Estude Boxlayout. Ele é muito poderoso, mas a maioria não conhece os poderes da glue dele.

  3. Crie um padrão de nomeação para seus elementos. Eu uso assim:

ChekBox cbCasado = new Chekbox();
ChekBox cbSolteiro = new Chekbox();
JTextBox txtNome = new JTextBox();

Extremamente últil para os autocompletar da vida.

4.Use innerClasses para tratar seus eventos. Fazer tudo na mesma classe traz muita confusão.

  1. Documente tudo, pois fazer tudo na mão leva mais tempo, o que dificulta lembrar de todo código a longo prazo.

  2. Existe algo parecido com mvc em interfaces gráficas, só não lembro o nome. Mas se você já tem experiência, use. Vai deixar seu código bem limpo.

  3. Pensa bem se é isso que você quer, pois até onde eu sei, depois que começa um layout assim, não dá migrar ele pra usar mantisse e afins, ou só partes deles.

C

Olha, entendo a opinião de vocês sobre layouts, um é melhor, outro é pior etc etc.

Mas, cada layout tem sua função, aparentemente parece que um ou outro não funcionam, mas talvez seja porque estejam sendo usados errados ou em momentos inapropriados.

Normalmente, para fazer componentes, posicionar JTables, JButtons, JPanels etc etc eu uso o GridBagLayout, vc faz o que quiser com ele em termos de posicionanemto e dimensionamento.

Não conheço o MigLayout, mas aprovo a idéia, pois o Swing do java é tão customizável que qualquer pessoa pode fazer o seu layout, assim como pode fazer o seu JButton, JPanel. Basta ler a documentação do Swing, é algo realmente impressionante, pode-se mudar tudo.

No mais, a pergunta era sobre “tudo na unha”. Assim, reforço a minha idéia, faça tudo na unha, pois só assim você terá experiência de fazer os seu próprio layout, seu JPanel, entre outros componentes customizado, que serão o diferencial no seu software.

L

Eu faço tudo na “unha” mesmo… Porém tenho classes padrões…que construí… Então quando vou formular uma tela, crio uma classe extendida da minha classe padrão de telas e só adiciono os componentes e “deu pra bola”… tudo é gerado…sem ferramentas visuais…
Eu acho essa forma boa, pois todo o sistema segue um padrão te formato de telas e a codificação também…
Outra vantagem seria na hora da manutenção… imagine vc fazer uma tela com vários componentes e funcionalidades… na hora da manutenção… vc nem vai se achar no meio daquele código gerado automaticamente…

Há quem goste de ferramentas visuais e há quem não goste… Depende de cada um e do que vai se implementar…

V

Falando em dicas, uma vez fiz um tópico com 15 dicas úteis para quem quer programar com Swing:
http://www.guj.com.br/java/104644-dicas-uteis-em-swing#565211

Outra dica. Para aprender, saia do Matisse e use por uns tempos o Visual Editor do Eclipse, nos layouts padrão (GridBag, Flow e Border). A grande vantagem é que o código do VE é bastante legível e cheio de boas práticas, bem diferente do Matisse. Dá para aprender bastante em termos de organização (especialmente no caso do GridBagLayout) só olhando o código automaticamente gerado por ele.

E claro, aprenda o MigLayout.

P

leopoldof:
Eu faço tudo na “unha” mesmo… Porém tenho classes padrões…que construí… Então quando vou formular uma tela, crio uma classe extendida da minha classe padrão de telas e só adiciono os componentes e “deu pra bola”… tudo é gerado…sem ferramentas visuais…
Eu acho essa forma boa, pois todo o sistema segue um padrão te formato de telas e a codificação também…
Outra vantagem seria na hora da manutenção… imagine vc fazer uma tela com vários componentes e funcionalidades… na hora da manutenção… vc nem vai se achar no meio daquele código gerado automaticamente…

Teria como disponibilizar um exemplo de como fazer isso? Achei muito interessante e estou desenvolvendo meu TCC, seria uma ótima prática.

M

eu vejo por ai certo preconceito com o ato de gerar janelas a partir de frameworks como o VE e o Matisse, especialmente o Matisse. Bom, uma coisa bastante alegada é que o código do matisse é macarrônico, extremamente difícil de qualquer um entender, certa vez li que o group layout foi feito para ser utilizado em ferramentas automatizadas, isso tem todo sentido. Se você criou um software com o matisse, deve guardar o projeto, com os .form e ao dar manutenção no software usar a mesma ferramenta que usou para cria-lo, senão é obvio que você terá problemas. Esse pessoal que cria as janelas no netbeans, cola as classes das janelas no eclipse e continua o trabalho a partir dai no eclipse, eu indico desde o começo usar o eclipse mesmo, senão ai sim você terá problemas na manutenção… Acredito que isso também vale para o VE, se você usou esse na criação do software, use na manutenção (mesmo que o código dele seja bem melhor que o do matisse).

Outra coisa também é que o uso do matisse não permite que a pessoa deixe de precisar aprender swing, não só é necessário, como certas coisas precisam ser codificadas na mão, certas vezes você precisa inicializar o componente de uma forma diferente por exemplo, o matisse te permite fazer isso, mas ai você que alterará o código de inicialização, digitando o novo inclusive.

A grande limitação que encontro é você ter que inicializar uma quantidade de componentes dinamicamente, como citou o vinigodoy (um conjunto de checkboxes cuja quantidade e dados venham do banco). Isso é uma limitação do matisse, mas ainda pode ser feito de forma elegante, você pode criar um painel e preencher estes componentes dinâmicos na mão, depois no seu JFrame no matisse inserir nele um painel e inicializa-lo como um objeto do seu painel criado, você não vai perder tanto por ter feito na mão essa parte, vai poder encapsular de forma bem feita na sua interface e de repente até da pra reaproveitar esse seu painel dependendo do caso (se não me engano tem um padrão que manda você fazer dessa forma, mas esqueci o nome).

M

polianomartini:
leopoldof:
Eu faço tudo na “unha” mesmo… Porém tenho classes padrões…que construí… Então quando vou formular uma tela, crio uma classe extendida da minha classe padrão de telas e só adiciono os componentes e “deu pra bola”… tudo é gerado…sem ferramentas visuais…
Eu acho essa forma boa, pois todo o sistema segue um padrão te formato de telas e a codificação também…
Outra vantagem seria na hora da manutenção… imagine vc fazer uma tela com vários componentes e funcionalidades… na hora da manutenção… vc nem vai se achar no meio daquele código gerado automaticamente…

Teria como disponibilizar um exemplo de como fazer isso? Achei muito interessante e estou desenvolvendo meu TCC, seria uma ótima prática.

você poderia por exemplo criar um JFrame padrão com os botões OK e Cancelar do lado direito inferior da janela e herdar esse seu JFrame em várias outras janelas do seu software… só um exemplo.

M

eu faço tudo na unha ainda
uso eclipse
tentei rodar o visual editor
mas ficou muito pesado
uso sem problemas o metodo “na unha”

R

O gerenciador de layout do contentPane de um JFrame é o BorderLayout por padrão, para adicionar esses dois botões basta só criar um JPanel e adicioná-lo no PAGE_END do contentPane.

public class MeuFrame extends JFrame {
    protected JButton ok;
    protected JButton cancelar;

    public MeuFrame() {
         ok = new JButton("OK");
         cancelar = new JButton("Cancelar");
         FlowLayout fl = new FlowLayout(FlowLayout.RIGHT);// Cria um gerenciador de fluxo com os componentes alinhados à direita
         JPanel p = new JPanel(fl);
         p.add(ok);
         p.add(cancelar);
         super.getContentPane().add(p, BorderLayout.PAGE_END);// Adiciona o painel no final do frame
    }
}

public class Teste extends MeuFrame {
    ... // Já herda os componentes adicionados acima
}
R

Pessoal, estou fazendo tudo na unha meu código, mais agora instalei o plugin do google pelo menos pra ajudar posicionar algumas coisas na tela, ajudar com algum auxilio, mais continuarei ajustando todo código na mão mesmo, até pela minha própria organização e para praticar.

Muitos aqui já deve estar usando o plugin no eclipse, quem não conhece pode baixar http://code.google.com/intl/pt-BR/javadevtools/wbpro/palettes/swing_palette.html depois vá em download copie o link para sua versão do eclipse e cole na sessão de instalação de plugins do eclipse.

Vantagem desse plugin que eu adorei ele constrói a janela a partir do seu código Java, não fica guardando informações em forms, arquivos xml, etc como outras IDEs, se pegar um código java feito na unha e rodar com o plugin é só de colocar na Haba Design e ele já constrói a janela referente seu código para que possa alterá-lo em modo Design como fazemos no netBeans e outros, outra vantagem achei rápido, pra quem gosta do Eclipse é um prato cheio.

Na instalação escolhi somente a opção do Swing mesmo, pra mim aqui por enquanto já é o suficiente.

espero ter ajudado que não conhece.

L
Rummenigge:
maior_abandonado:
você poderia por exemplo criar um JFrame padrão com os botões OK e Cancelar do lado direito inferior da janela e herdar esse seu JFrame em várias outras janelas do seu software... só um exemplo.

O gerenciador de layout do contentPane de um JFrame é o BorderLayout por padrão, para adicionar esses dois botões basta só criar um JPanel e adicioná-lo no PAGE_END do contentPane.

public class MeuFrame extends JFrame {
    protected JButton ok;
    protected JButton cancelar;

    public MeuFrame() {
         ok = new JButton("OK");
         cancelar = new JButton("Cancelar");
         FlowLayout fl = new FlowLayout(FlowLayout.RIGHT);// Cria um gerenciador de fluxo com os componentes alinhados à direita
         JPanel p = new JPanel(fl);
         p.add(ok);
         p.add(cancelar);
         super.getContentPane().add(p, BorderLayout.PAGE_END);// Adiciona o painel no final do frame
    }
}

public class Teste extends MeuFrame {
    ... // Já herda os componentes adicionados acima
}

Boa idéia também....

Também daria para seguir a seguinte idéia
public class MeuFrame extends JFrame {
    protected JButton ok;
    protected JButton cancelar;
    protected JPanel pInterno;

    public MeuFrame() {
         setLayout(new BorderLayout()); 
         ok = new JButton("OK");
        ok.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
             acaoOK();
}

});
         cancelar = new JButton("Cancelar");//faz o mesmo para este botao como no OK
       
          pInterno = new JPanel(new FlowLayout(FlowLayout.RIGHT));
         pInterno.add(ok);
         pInterno.add(cancelar);
        add(pInterno,BorderLayout.SOUTH);
        
    }
   public void setPainelCentral(JPanel pnl){
          add(pnl,BorderLayout.CENTER);
    }

      //Metodo que vc pode sobrescrever na classe que herdar esta
    public void acaoOK(){};
}
depois na sua classe normal vc faz algo parecido com isso
public class Teste extends MeuFrame {  
    public Teste(){
     ... // Já herda os componentes adicionados acima  
    JPanel pnlcentral = new JPanel();
//Implementa aqui os componentes e adiciona no painel central depois adiciona ele no jframe
setPainelCentral(pnlCentral);
}
//sobrescreve o metodo de acao do botao ok
public void acaoOK(){
//aqui vc coloca as ações que quer que faça para a tela no botão OK
}

 }

Claro isso é só para se ter uma idéia... para se seguir... dentro dessa idéia de herdar padrão dá pra abstrair um monte de coisa que geralmente o pessoal reimplementa várias de vezes no sistema....em cada telinha gerada...

R

tb prefiro usar na unha, depois de alguns incomodos, com o pronto. sem falar que tem que adicionar uma lib, em alguns casos… que depois nao funciona no jar…

segue um arquivo em que estou trabalhando. que foi feito na mao… inclusive tem um painel em 2d, que tb dá bastante mobilidade ao programa… é muito fácil usar 2d, na maioria dos casos, e é bastante dinamico tb…

em construção…

R

peguei muito o funcionamento,
no livro
desenvolva aplicativos com java 6 de renato rodrigues filho.
ah e parei de usar layouts tb…

meu poker e memoria, foram feito com layous … nao fica muito bom…

http://www.raghyjose.net/programacaoatual.php

melhor tudo na mão mesmo…

Criado 19 de abril de 2011
Ultima resposta 29 de abr. de 2011
Respostas 30
Participantes 18