Por que usar Swing ainda é tão trabalhoso?

41 respostas
C

Bom Dia Galera.

Sou estudante e iniciante na tecnologia Java e tenho visto a mesma se destacar de forma extraordinária nos últimos
tempos.
Atualmente trabalho usando Delphi e me surgem as seguintes dúvidas.
Visando aplicações Desktop, já usei o Netbeans, o Eclipse com os plugins VE e Jingloo e percebi que existe ainda,
não sei se poderia dizer deficiência, mas uma certa dificuldade para se trabalhar com componentes visuais
através do Swing no Java.

No Delphi, temos a maioria das coisas tudo encapsuladas através das propriedades, o que facilita em muito o
desenvolvimento.

Um exemplo básico que poderia citar seria carregar um Grid com dados de um banco.
A diferença da forma como é feita no Delphi entre como é feito no Java chega a ser gritante.

Gostaria que falassem o porque não temos esse amadurecimento ainda nas tecnologias, frameworks que visam
facilitar o desenvolvimento Swing.

Será que o foco do Java nunca foi para aplicações DeskTop?
Mesmo usando o NetBeans, que na minha opinião de iniciante possui a melhor estrutura para se trabalhar com Swing,
encontramos muitas situações que temos que fazer tudo na mão, no código.

Por que não temos uma ferramenta como o Delphi para trabalhar com Swing no Java? Ou temos?

Toda e qualquer sugestão e opinião, será muito bem vinda.

Obrigado.

41 Respostas

V

E ai carlos, a uns 5 anos atraz sai do delphi e fui para java e tbm achei a mesma coisa, mas atualmente nao troco meus codigos que tenho todo controle, que posso personalizar conforme minhas necessidades, por codigos escritos pela IDE. Tambem uso netbeans com swing e ate hoje consegui fazer td que precisei, logico q tive que criar minhas classes, meus proprios componentes, etc… Mas acho q isso é uma questao de tempo para voce, apos aprender java vai tranquilo… Ja dei treinamentos para pessoas que sairam do delphi e todos tem a mesma dificuldade e o costume que tudo q precisa fazer eh so arrastar um componente do delphi q td esta pronto.
Sobre uma IDE para java parecida com delphi JBuilder, nao sei em q versao esta, site para download, pois dei uma olhada a uns 4 anos atraz.

J

Todos os componentes do matisse(Isso falando de netbeans), também são classes e encapsulam propriedades e métodos. Eu tmb trabalho com objectpascal(Delphi), aqui, e acho o matisse muito melhor. Não vejo nenhuma dificuldade de usá-lo.
A VCL é muito boa, mas o swing é bem mais robusto.

Na minha opinião, o único problema é performance. Pois o swing é muito pesado. Só nisso que peca.

F

No começo todo mundo acha delphi melhor :slight_smile:

Com o tempo vc percebe que todas aquelas classes de Listener, que inicialmente era toscas ajudam muito do desenvolvimento, por vc não tem um unico metodo que o clique do botão chama, vc pode ter N metodos, sem um interferir no outro.

Aqui não tenho também reclamações de usar o Matisse, prefiro mil vezes desenvolver uma GUI usando java que em Delphi.
Odeio código macarronico :slight_smile:

M

"

F

marcosalex:
O Delphi tem listeners desde 2003.
Ainda tem muita coisa que o Netbeans precisa melhorar na IDE RAD sim. Apesar da linguagem ser mais robusta, o Java ainda peca muito em facilidade de uso. Se eu quero alterar o cursor do mouse quando clico nele, o Delphi e o Visual Studio me apresentam uma lista de modelos. Se quiser algo fora dele, basta selecionar um externo. O Netbeans só tem a opção de selecionar arquivo externo.
Ferramentas de geração de relatórios, nem se fala. Até o QuickReport tem muito mais flexibilidade que o iReport.
O Delphi além de mais componentes, têm muito mais propriedades e eventos. Até fazer um componente “na unha” em Delphi ainda é mais fácil que fazer em Java.

Espero que com o Java FX a Sun finalmente corrija essa defasagem.

Apesar de nunca ter criado um compoenente no Delphi na unha, eu não axo nada Dificil fazer um extends JTextField, e personalizar alguns detalhes, ou criar um Documento para processar as palavras, limitar algo. Utilizar o UndoManager para gerenciar Ctrl+Z e Ctrl+Y, e quanto aos cursos, só não existe uma listagem grafica, mais Cursos.WAIT_CURSOR, é muito intuitivo.

Delphi possui listeners? nunca tinha visto.

Um coisa vale resaltar, que o NetBeans Não busca ser uma IDE RAD, pelo pouco q eu sei pelo menos. Busca somente proporcionar alguma facilidades.
O que a sun quer com o Swing é flexibilidade, não forçar acoplamento. Quanto ao iReport, realmente não vou comentar, até agora não consigo fazer rodar o 3.5.1

Cada linguagem com seus objetivos, vamos ficar discutindo dias aqui mostrando os pros de uma, os contras de outras, e no fim vamos continuar pensando a mesma coisa.

[]'s

B

Galera,

Eu vejo muita gente na facudade que programa com Delphi ou C# reclamando do java por ter que extender uma classe para chamar um componente.

realmente arrastar um componente é muito mais fácil que chama-lo apartir de uma classe,
porém no java você tem mais controle sobre seu programa e pode personalizar mais facilmente seu aplicativo e tem um maior domínio sobre suas classes.

vlw

J

Ok, então estamos falando de facilidades de Ide, e não de framework, como no caso a VCL e o Swing.
Concordo que o delphi facilita muito em termos de ide. Mas existem coisas no netbeans que tmb facilitam muito, como a refatoração e a facilidade de se criar beans(componentes). Essas duas funcionam muito melhor que no delphi.

Não estou desmerecendo o delphi. Ele é minha ferramenta diária aqui.

F

A idéia inicial da linguagem Java, pelo que eu saiba, não foi se concentrar em aplicações executadas na “parte client” e sim na parte server e pequenos dispositivos; para isto já existia coisas muito mais eficientes como o VB, Delphi e alguns outros que não lembro agora.

Como os usuários começaram a pressionar muito com críticas e declarando que havia espaço para Java neste setor a Sun resolveu investir um pouco mais construido o swing (antes havia apenas a AWT), hotspot e dai por diante sem falar em vários frameworks que sugiram. O engraçado é que o foco principal do java nunca foi o client mas ainda assim construiu umas APIs mais sofisticadas do planeta para atuar no setor. É claro que se comparar com outras coisas como o Delphi por exemplo vc irá entrar algumas coisas que não existe (prontas) no java; mas aí é que está a graça da coisa toda. Se NÃO existir, as APIs lhe dão todo o suporte para implementar, o limite praticamente será sua condição técnica, e olha que é “multplataforma” e gratuito. Resumindo, nas outras linguagens que aparentimente facilitam as coisas é facil também vc ficar em uma situação de ter que dizer que não dá pra fazer, mesmo pagando por isso. Em java vc pode chegar nesta situação tambem mas é bem mais difícil; eu ainda não vi tal situação.

Sem querer fazer comparações, também gosto do Delphi e as idéias que estão contidas nele.

P.S Quem trabalha com java não pode esperar trabalhar de forma igual quando trabalhava com Delphi o inverso também é verdadeiro; porque fazer um software em java que pode ser feito em Delphi sem obter nenhum valor não faz o menor sentido.

flws

M

"

J

Não, era multiplataforma com clx. Que compilava no kylix. Mas foi um fracasso devido, que os usuários de unix não gostavam de ter uma ferramenta que não fosse opensource. Mas hoje o lazarus existe e é imbatível.

F

O idéia do lazarus é bacana, o problema é que os componentes ainda estão bem longe da quantidade e qualidade existente no Delphi e no kylix sem falar na comunidade que ainda é muito fraca, nem se compara com as que existem no mundo Java, e como se não bastasse tem o paradigma também; por enquanto tudo que é feito em código que se parece com VB ou Delphi estranhamente está ligado a coisas do passado, ou seja, linguagens procedurais. Mesmo o Lazarus, Delphi, Kylix sendo orientados a objetos.

flws

J

O mesmo criador do c# foi quem criou o ObjectPascal. É orientado a objetos.
Sobre quantidade eu concordo com vc, qualidade não.
A vantagem é que o lazarus utiliza o freepascal, como compilador, que é muito superior ao bpc32 da borland.

F

Eu tambem trabalhava com Delphi, mas comigo foi o contrario, quando comecei a programar em swing, gostei na hora, o controle e a customização que voce tem é muito grande e com certa facilidade. Claro voce tem que codificar mais, mas esta tudo ali na tua mão.

Por exemplo todas as minhas JTables tem 4 classes para funcionar legal: TableModel, ColumnModel, CellRenderer e HeaderRenderer, é coisa demais pra um “grid”? é, porem a customização é enorme, eu escrevo de cabeça pra baixo se quiser :lol:

Ja o Grid do Delphi, uma vez estava vendo um artigo da ClubeDelphi, sobre como colocar um checkbox no Grid, a Gambi foi pintar uma imagem quando marcado e outra imagem quando desmarcado hehe. Isso era Delphi 7 se nao me engano, nao sei como anda o Delphi hoje.

Eu nao estou falando na rapidez, até entao eu fazia todas minhas apps swing na unha, sem Matisse, estou falando na facilidade em customizar as coisas, eu achei muito mais facil tratar certas coisas no swing que no delphi. No Delphi arrastar e setar propriedade, é super easy, mas fica por ae, se tu precisar de algo que nao esta ali, e tiver que fazer na mão, ai o bixo começa a pegar.

R

juliocbq:
. Mas existem coisas no netbeans que tmb facilitam muito, como a refatoração e a facilidade de se criar beans(componentes). Essas duas funcionam muito melhor que no delphi.

O problema é que no Delphi pra criar um componente e ele aparecer na paleta de componentes você tem que obrigatoriamente criar um monte de configuração chata e complexa (pelo menos era assim no Delphi 7). É muito difícil achar um Delpheiro que saiba fazer essas coisas…

R

juliocbq:
O mesmo criador do c# foi quem criou o ObjectPascal. É orientado a objetos.
Sobre quantidade eu concordo com vc, qualidade não.
A vantagem é que o lazarus utiliza o freepascal, como compilador, que é muito superior ao bpc32 da borland.

Superior em que sentido?

J

Rubem Azenha:
juliocbq:
. Mas existem coisas no netbeans que tmb facilitam muito, como a refatoração e a facilidade de se criar beans(componentes). Essas duas funcionam muito melhor que no delphi.

O problema é que no Delphi pra criar um componente e ele aparecer na paleta de componentes você tem que obrigatoriamente criar um monte de configuração chata e complexa (pelo menos era assim no Delphi 7). É muito difícil achar um Delpheiro que saiba fazer essas coisas…

Uai, fazer isso num é difícil, é só registrar com esse procedimento:

procedure Register; begin RegisterComponents('Julio', [TDVJungo]); end;

Sobre o free pascal, ele gera código muito mais exuto, o que faz executáveis menores, suporta instruções mmx… (bcp32 não faz nada disso)

http://www.freepascal.org/

H

Também sou programador Delphi e estou a mais de 2 anos estudando Java, fazendo cursos e desenvolvendo sistemas desktops, e realmente concordo com a maioria das colocações. Realmente para criar e utilizar uma dbgrid e muito rápido e fácil, customizar ela trocar a fonte a cor de fundo e outras coisas, mas realmente n temos nelas o mesmo controle que temos sobre as jTables utilizando os models e tals, como o colega falow eu tbm costumo ter 3 ou 4 classes para as minhas jTables.
Eu cheguei a uma conclusão, realmente o netbeans deve melhorar muito ainda, dando mais facilidade na hora de criar uma simples tabela para os sistemas simples aos quais não são necessárias muitas customizações, já sei que alguns vão falar ?mas para isso existe o DefaultTableModel?, mas daí o cara que ta começando com o Java vai procurar no google e vai ver que várias pessoas falaram ?n utilize DefaultTableModel???, e assim ele vai procurando e procurando e demora algumas semanas ate aprender a utilizar os Models e os Renderers…
O que eu quero dizer é que deve existir uma ide onde quem quer fazer um sistema simples a ide proporcione isso pra ele! Se o programador quer tudo customizado, ele pode criar todas as suas classes e customizar!

M

Porque ainda não inventaram uma forma produtiva de fazê-lo. :wink:

M

"

M

"

J

marcosalex:

O CLX sempre foi mais limitado que a VCL. Não tinha nem metade dos componentes e ainda era muito bugado.

O Lazarus até hoje dá crash quando a gente vai debugar. Sem debug é difícil comparar a IDE a alguma outra profissional. E os executáveis dele pra Windows são muito, muito grandes, o que leva a maioria a usar gambiarras, como o upx

Componentes em Delphi são fáceis também de extender, inclusive com herança visual (até hoje não sei como ninguem criou herança visual pra Java)

Outra coisa que vejo superior no Java é a API de reflexão. A do Delphi ainda é muito fraca.

Eu debugo o tempo todo com lazarus, e não tive esse problema ainda. Os executáveis são grandes se vc marcar o linker para linkar estaticamente(Essa opção o compilador bpc32 não possui, por isso os executáveis são enormes). Linkando dinamicamente, vai gerar executáveis menores que 50Kb.

Sobre os componentes comerciais, é claro que o lazarus e o kylix não teriam, são ferramentas opensource.
Sobre herança visual, esse realmente é um ponto fortíssimo do delphi, e o lazarus tmb faz.

B

Em Swing em Java é trabalhoso mesmo, tente em Groovy ou Ruby pra facilitar, por exemplo:

http://groovy.codehaus.org/Swing+Builder

M

"

F

Herança visual :?: :?: :?: :?:

Como funciona isso?

Por um acaso seria uma formulario construido através da herança de outro formulário?

flws

J

Dos poucos não, dos muitos. É claro que existem bugs, o lazarus está em costante desenvolvimento, ao contrário do delphi, que a única versão descente a 7. As posteriores estão tão bugadas que é impossível de usar, o que me fez portar alguns projetos para java, usando netbeans.

Não possui, e aqui está a prova:


J

sobre componentes comerciais no lazarus, isso não existe. Lazarus é um projeto “OpenSource”. A licença restringe o uso de componentes comercias, serem lançados “com ele”.

J

Este é o freepascal. Nem tem comparação:


M

"

O

olha, hoje em dia está barbadinha fazer uma interface gráfica em swing com netbeans.

Quando n existia matisse… fazer tela na mão…tempos dificeis…

E com swing vc pode facilmente alterar um componente pra seus desejos, como fiz no meu TCC, procure por Trama no google code.

O

Herança visual :?: :?: :?: :?:

Como funciona isso?

Por um acaso seria uma formulario construido através da herança de outro formulário?

flws

Acho que deve ser como um gerenciador de layout como facelets ou tiles.

J

Eu acho o Swing trabalhoso. Mas pelo que percebi, o JavaFX veio pra substituir. Ai sim, aquilo é uma coisa fácil demais de usar.

P

Eu como devolvedor Java e Delphi acho que posso dar minha opnião. E também minha opnião de professor

Em termos de criar interface o Delphi facilita bastante o posicionamente de componetes na tela.
Java também tem diversos gerenciadores de layout para facilitar o desenvolvimento. O do Delphi ainda é mais pratico.

Eu questão de preencher os dados de um tabela vincular componentes a um objeto ,java tambem tem diversos frameworks para isso conhecido como frameworks de binding. Eu desenvolvi meu proprio framework de binding para para atender as minhas necessidades, além de possuir os recursos de binding que existem em outros frameworks. Por trabalhar com delphi tentei trazer algumas ideias do delphi em termos de praticidade para meu framework.

Com java você consegue realmente usar a orientação a objeto. Em delphi a orientação a objeto não é tão forte quanto o Java.

A curva de aprendizado do Java é um pouco mais longa que a do Delphi.

O Swing foi projetado para ser o mais extensivel possível, para que o desenvolvedor não fique preso ao componente quando quiser extender alguma funcionalidade. Basta entender como se encaixa as peças.

Bem são varias vantagens e desvantagens que poderiamos abordar em um linguagem e outra.

Acho que o mais dificil para quem esta iniciando em Java e entender realmente como funciona a orientação a objetoa, e de como tirar o máximo proveito deste recurso poderoso. Se um desenvolvedor domina bem um determinada linguagem com certeza será produtivo. Em java so terá que empenhar um pouco mais, entender o funcionamento das classes Java, assim, conseguir utilizar todo o recurso do Java.

Bem poderia escrever mais tai ai minha simples opnião.

J

marcosalex:
Sinceramente, você é o único até agora que vejo falar que o Lazarus está bom. Como eu disse, no próprio site da ferramenta, os próprios desenvolvedores admitem que falta muito pra chegar perto do Delphi e VB.

1 Tanto o Delphi 2005, 2007 e 2009 tem muitas, muitas novidades que o Lazarus ainda está longe: refactoring, reflexion, generics, records com métodos, arrays dinâmicos, clojures, classes parciais, code folding, código nativo, pra Mono e pra .NET, listeners, etc…E componentes muito sofisticados, consulte o site deles.
2 Componentes comerciais pro Lazarus existem sim. Só não vêm com ele, mas você pode adquirir. Dá uma pesquisada na Internet que você vai achar.
3 Linkagem dinâmica existe desde o Delphi 3, basta marcar nas opções. Como a IDE chama o compilador em background, não sei qual seria o parâmetro, mas se você for no menu Project, selecionar “Options”, está gritante a opção. Já usei muito na empresa.

O que prefiro no Java é a sintaxe mais orientada a objeto, o que é natural, já que é uma evolução do que havia antes. Da mesma forma que Ruby sob muitos aspectos conseguiu uma orientação a objetos mais elegante do que a do Java.

Marcos, vc confunde ide, compilador e linguagem. Refactioring é recurso de ide, generics e records, o freepascal tmb compila, prq a linguagem dele é Object pascal, a mesma do delphi, e isso é iso.

“Closure”, não é nada mais que um ponteiro pra função. Isso pode ser conseguido em qualquer linguagem que permita ponteiros(Caso do ObjectPascal).
“Código” nativo pra mono e .net não existe. Existe o IL (Intermediate Language)

Como eu havia respondido para você, o lazarus não pode ter componentes comerciais, devido a restrição da licença. Mas é claro que podem ser instalados nele . Você o criticou porque não tem metade dos componentes do delphi(Pela mesma razão das restrições da licença).

Linkagem dinâmica o delphi não tem, é só olhar nas opções do compilador que te enviei. O linker do delphi compila tudo estaticamente. Compilar pacotes separados do projeto não é linkagem dinâmica.

Eu acabei falando besteira tmb, porque o freepascal não faz isso. Percebi quando te enviei as opções dos dois compiladores. Mas é fato, a ferramenta “strip.exe” é melhor que a do delphi, removendo as informações de debug e otimizando o executável, ficando realmente menor.

O lazarus foi projetado devido ao amontuado de besteiras que a borland veio fazendo com o delphi(Ide e compilador), como suporte ao dotnet. A IDE ficou horrível e pesada com isso. Na minha opinião, o último release descente do delphi foi o 7 .

A partir disso, a comunidade opensource desenvolveu um framework compatível com a vcl(a LCL), para que nós, que também gostamos codificar em objectpascal, pudéssemos contar com uma boa ferramenta. É claro que há muitos bugs, mas o lazarus, como está hoje, deixou o delphi sete anos luz atraz.

M

"

J

marcosalex:
Não são só os componentes visuais que o Lazarus carece. Da própria VCL do Delphi o Lazarus só tem a metade. Ele está próximo de chegar no nível do Delphi 3. Acho que quem está a anos luz do outro não é o Delphi. :lol:

A linguagem do Delphi já mudou o nome pra Delphi Language, não chama mais Object Pascal, principalmente pra diferenciar as dezenas de funções novas.
Quando citei Refactoring, etc. Estava falando do Delphi, já que estamos comparando com o Lazarus e da Delphi Language comparado ao FreePascal.
Não sabia que o Lazarus já tinha generics. hehehe Alguma coisa evoluiu.

Uai, você se sente preso aos componentes?

O delphi, não existe mais hoje. Mas a linguagem objectpascal existe, e é iso, ao contrário da delphi language(Nunca ouvi falar disso, os livros me disseram o contrário).
O Lazarus é opensource, não depende de empresa pra se tocar. As coisas são mais simples.

T

Concordo que em Delphi não se estimula tanto o uso de OO quanto em Java, mas Delphi tem tantos recursos de OO quanto Java tem hoje. Não é verdade que uma é menos OO do que a outra.

Ponteiros pra função tá mais pro conceito de delegates do C# do que pra closures. Martin Fowler desmistificou neste artigo a diferença entre ambos.

J

Concordo que em Delphi não se estimula tanto o uso de OO quanto em Java, mas Delphi tem tantos recursos de OO quanto Java tem hoje. Não é verdade que uma é menos OO do que a outra.

Ponteiros pra função tá mais pro conceito de delegates do C# do que pra closures. Martin Fowler desmistificou neste artigo a diferença entre ambos.

Você tem razão, fiz confusão entre closures e delegates. Closure é quando a função aponta pra varáveis em seu interior(ou seja, o contrário).

M


Por que usar Swing ainda é tão trabalho ?

Acho que essa pergunta, ou tá mau feita ou a pessoa quer saber para quais aplicações swing é ou não uma vantagem.Eu entendo java como um tecnologia que trabalha melhor com infraestrutura.
A tecnologia Java tem suas caracteristica tem melhores aplicações em determinados cenário.
Você pode trabalhar com swing utilizando em uma pagina web, basta você usar applet Java, mas você tem tecnologias que trabalham melhor com browser exemplo JavaFX.
Ferramentas Visuais que lhe dão recursos para usar compontentes arrastar e soltar existem e sempre foram a melhor saida para se produzir desenvolvimento, com relação ao java Swing para desktop o Netbeans esta bem avançado e tem recursos visuais também.Entretando a especificação java swing ainda é robusto no lado aplicativo acho que produz uma interface feia, você tem outras ferramentas ai Open Source que fazem algo melhor em Tela concerteza.
Java para infraestrutura sim acho que é um solução a integrar sistemas que precisam se comunicar com uma demanda de protocolos e tecnologias e sistemas operacionais distintos.

P

Eu uso SWT e JFace na mão ao invés de usar um editor com interface gráfica que implemente em Swing.
Acho SWT muito bom e nunca tive problemas com ele.

Já tentou usar?

Abraços

J

pedroghilardi:
Eu uso SWT e JFace na mão ao invés de usar um editor com interface gráfica que implemente em Swing.
Acho SWT muito bom e nunca tive problemas com ele.

Já tentou usar?

Abraços

Concordo. Hj estou usando o SWT e considero ele bem melhor que o Swing. O Swing é lento por ser independente de plataforma. E é extremamente burocrático, mesmo usando o netbeans.

S

Componentes Java são, de fato, mais trabalhosos.
Mas, com trabalhoso pode-se associar a capacidade de manipulação total de cada componente, podendo ir até onde a sua imaginação permitir.
Alguns componentes em Delphi, por exemplo, são engessados, ou seja, não permitem uma manipulação além do contextual.

A principio, desenvolver componentes visuais em Java parece ser um bicho de sete cabeças. Mas, com o tempo, ao passo que voce conhece melhor as suas capacidades e possibilidades, torna-se mais “agradável”. Além é claro de poder reuitlizar componentes desenvolvidos já modificados, o que diminui e muito o retrabalho.

Até.

Criado 1 de junho de 2009
Ultima resposta 2 de jun. de 2009
Respostas 41
Participantes 21