Melhor framework XML GUI Java (XUL Java)

26 respostas
rodrigousp

Desafio do Contador
Uma análise sobre o problema

26 Respostas

_fs

Laszlo, de looo…n…ooonge :smiley:

http://www.openlaszlo.com/

Mas realmente de mmmmmuuuito longe.

Trabalho com o Mozilla XUL, é ótimo e tudo mais … mas o Laszlo … ganha de longe nessa categoria :smiley:

ps.: de longe.

Rafael_Steil

Soh Java mesmo para ter esse tipo de coisa bizarra…

Rafael

kartler

LIPE:
Laszlo, de looo…n…ooonge :smiley:

http://www.openlaszlo.com/

Mas realmente de mmmmmuuuito longe.

Trabalho com o Mozilla XUL, é ótimo e tudo mais … mas o Laszlo … ganha de longe nessa categoria :smiley:

ps.: de longe.

Lipe c tem razão mesmo… mas precisa de muita memoria pra trabalhar com ele. mas é realmente fantastico.

rodrigousp
danieldestro

Para mim, Thinlet, SwiXml e Luxor parecem legais.

kuchma

Ah, que preconceito bobo. Essa eh a nova salvacao da lavoura. Ate o .NET quer ter (XAML)… :smiley:

Marcio Kuchma

danieldestro

Sobre o Thinlet:

Questões relevantes
0) É open source?
R: SIM

  1. Existe uma separação bem feita entre MVC? (A necessidade de ActionEvent, Listener, etc, faz o framework perder ponto)
    R: SIM

  2. Cobre as funcionalidades do Swing/SWT ?
    R: Basicamente, SIM.

  3. Xml proposto pelo framework tem um dtd ?
    R: Não sei, mas acho que tem.

  4. Quantas linhas de código são necessárias para fazer o “contador”???
    R: Poucas, vide o link que você mesmo passou.

  5. Existe um plugin para eclipse, netbeans ou uma ide para montar a interface?
    R: O programa ThinG gera a tela e o XML. Existe o Theodore também, mas é pago.

rodrigousp
renatosilva

danieldestro:
Sobre o Thinlet:

  1. Cobre as funcionalidades do Swing/SWT ?
    R: Basicamente, SIM.

  2. Xml proposto pelo framework tem um dtd ?
    R: Não sei, mas acho que tem.

  1. NMO muito básico
  2. O Thinlet não usa XUL?

Bem acho que o código com Thinlet fica meio porco, eu pensava que o Thinlet era uma biblioteca de componentes cujo uso era transparente para o usuário, mas parece que tem que colocar um monte de gambiarra… Mas a idéia de construir a interface via XML em vez de via código é ótima. Acho que o que falta no Thinlet é ele se tornar mais fácil de codificar.

danieldestro

Thinlet usa XUL sim. Bom, não sei se é só o conceito ou se é a padronização toda. Mas, enfim…

Quer usar Thinlet de forma BEM transparente? Use com o Genesis.

_fs

Renato, o Thinlet possui uma extensão boa para resolver o problema da classe de 10mil linhas:
http://sjobic.club.fr/thinlet/owthinlet/index.html

Acho o Thinlet ótimo e cabe perfeitamente para aplicações vai-no-banco-pega-os-dados-preenche-o-formulário. Se você quer mesmo desenvolver uma aplicação Java usando xml ao invés de código, vá com ele que não tem erro.

Mas se você precisa de algo mais robusto, use Swing. Ele empresta ao desenvolvedor um poder incrível, tanto de fazer merda quanto de desenvolver um controlador de robozinhos em marte :thumbup:

Rodrigo, quem faz a separação de camadas é o desenvolvedor. Se os programas que você já viu em Swing viraram uma grande e fedida massinha de modelar, é culpa do desenvolvedor, não da tecnologia @.@

renatosilva

Lipe, o object wrapper que você indicou parece legal, mas achei estranho que no exemplo a janela é criada via código. Eu não entendi. Me explica?

Eu queria uma coisa: imagine seu código Swing/SWT etc…

Agora divida o código em duas partes, uma onde você monta a interface gráfica (agh!! trabalho de design via código) e outra onde você a usa. Agora imagina que você não precisa da primeira parte, porque os dados de como deve ser montada a GUI vêm de um XML. Só que a segunda parte fica inalterada, esse é o ponto que o Thinlet não oferece.

O Delphi é assim, você monta a janela graficamente, então é gerado um arquivo de descrição da janela que é linkado ao programa na compilação. O código só é alterado para montar a classe do form (janela). Assim um form com uma caixa de texto e um botão é uma sub-classe de “Janela” com esses membros.

Eu gostaria que existisse uma ferramenta que parseasse o xml e gerasse a sub-classe em tempo de compilação e inserisse o xml como um recurso embutido da classe.

danieldestro

Cara, não existe mágica. ALGUÉM tem que fazer a colagem (binding) entre a sua classe e a telinha. O Genesis faz isso. Não conheço Delphi, mas não creio que seja essa mágica (que eu mesmo não entendí) que você disse.

Eu to refatorando um programa meu. Tô usando Swing ainda, mas to trabalhando apenas com intefaces. Garantí independência total de interface gráfica. Seja Swing, Thinlet, Awt, SWT ou papel rascunho.

Só preciso implementar a classe que faz o link entre a tela e meu controlador.

_fs

Ou não entendi seu comentário ou você não entendeu o Thinlet hehe

A partir da classe Java é que a janela é lançada. E nesta classe Java é que ficam os métodos que respondem aos eventos dos widgets. Qual a complicação?

A segunda parte seria um front-controller ou similares, que fica inalterado de qualquer maneira oras.

danieldestro

Sobre o Wrapper pro Thinlet, acho que é usar Thinlet pra brincar como se brinca no Swing. Ou seja, um passo pra frente e um para trás.

renatosilva

Lipe, desculpe na verdade é só o primeiro parágrafo que é direcionado a você. Eu achei legal o link, mas não entendi o exemplo que monta a janela via código, aparentemente inutilizando o Thinlet.

Daniel, sobre o funcionamento do Delphi, não estou dizendo que ele é melhor, que é mágico, estou apenas dizendo como funciona: você não escreve uma linha de código para montar a GUI, apenas para usá-la.

Veja um exemplo de definição de janela (DFM) com uma caixa de texto e um botão (é texto mas não xml):

object myForm: TmyForm
  Left = 246
  Top = 361
  Width = 162
  Height = 117
  Caption = 'Beautiful Window'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object btnOK: TButton
    Left = 40
    Top = 48
    Width = 75
    Height = 25
    Caption = 'OK'
    TabOrder = 0
  end
  object edtNome: TEdit
    Left = 16
    Top = 8
    Width = 121
    Height = 21
    TabOrder = 1
    Text = 'Some default text'
  end
end

E a classe que é gerada (não há montagens estapafúrdias de janelas via código, se bem que você pode fazer isso se quiser):

type
  TMyForm = class(TForm)
    btnOK: TButton;
    edtNome: TEdit;
  end;

E o código para usar, no caso eu seto a caixa de texto com um valor ao clicar no botão OK, por exemplo:

var  myForm: TmyForm;
...
procedure TmyForm.btnOKClick(Sender: TObject);
begin
  myForm.edtNome.Text := 'Dolores';
end;

Olhando a classe TMyForm como você sabe a aparência da Janela? Porque o Delphi “cola” a descrição junto com a aplicação que a utiliza para montar a janela.

Resumindo o que eu queria: imagine o Swing. Imagine montar as janelas em um XML como no Thinlet. Agora imagine que você usa as classes normalmente sacaram, sem gambiarras de Object, parse etc etc. O Thinlet transforma uma forma de descrever GUIs em uma nova maneira, tosca, no código, de manipular seus botões, combos, janelas etc.

danieldestro

Renato, no NetBeans eu consigo a mesma coisa.
eu faço toda minha view arrastando componentes e dou um duplo clique num botão que me gera o código para um evento do botão.

A diferença é que no Delphi a definição fica num TXT e no Java o código fica junto. Mas nada impediria te ter uma IDE que já me desse uma classe para a tela e outra que responde aos eventos da tela.

Delphi e VB são muito bons para este tipo de coisa, são rápidos pra desenvolver.

renatosilva

Então, queria que o Java tivesse isso.

Acho que o caminho é separar a montagem da tela de seu uso. As IDEs poderiam gerar a descrição fora do código e, sugestão, em XUL ou algo do tipo.

rodrigousp
_fs

Fiquei curioso sobre o que falou sobre SmallTalk e pesquisei até encontrar isto aqui:

self add: Button id: ##CalcButton name: nil aspect: #calcButtonPressed.

calcButtonPressed
    "Compute the actual number of man-hours to complete a task."
	
    | totalHours adjustedHours factor |

    (self widgetNamed: #hourField) updateModel.
    totalHours := Double fromString: self hourFieldModel value.

    factor := #(1.0 1.5 2.0) at: (popupListModel selectionIndex).

   adjustedFieldModel value: totalHours * factor.

Ok, realmente em Java seriam 7 linhas para obter o mesmo resultado no tocante ao listener, ponto pro SmalTalk. Contudo, do “ponto-de-vista mvc” que você está criticando, é a mesma macarronada que isto aqui:

JButton button = new JButton( "enviar" );
button.addActionListener( new ActionListener() {
	public void actionPerformed( ActionEvent e ) {
		submit();
	}
} );
add( button );

Não sei se está familiarizado com o JBinding ou o SwiXml. Se não, aconselho a dar uma olhada no modelo de eventos de ambos, para saber o que é possível com Java.
Só porque Swing é (muito) cru não quer dizer que seja ruim. Estou trabalhando com o famigerado atualmente e estou maravilhado com as possibilidades que ele oferece.

Um exemplo em SwiXml:
<button Text=“Click Here” Action=“submit”/>
Pronto, colocou o listener no danado :smiley:

R

Contribuindo com o debate:

Iniciando os estudos com o Laszlo ( dois períodos, até o momento ) resolvi encarar o desafio do contador por não ter sido incluido na listagem.

Então ficou assim:

&lt;canvas width="500" height="200"&gt; &lt;script&gt;var gn=0&lt;/script&gt; &lt;window width="210" height="85" title="Desafio do contador" bgcolor="#CCCCFF"&gt; &lt;simplelayout axis="y" spacing="4"/&gt; &lt;text width="20" align="center" id="txt"&gt;0&lt;/text&gt; &lt;view align="center" &gt; &lt;simplelayout axis="x" spacing="4"/&gt; &lt;button text="Dec(-)" onclick="txt.setText(--gn)"/&gt; &lt;button text="Clear" onclick="gn=0;txt.setText(gn)"/&gt; &lt;button text="Inc(+)" onclick="txt.setText(++gn)"/&gt; &lt;/view&gt; &lt;/window&gt; &lt;/canvas&gt;

Para produzir isto:

Estou achando muito poderoso e bastante fácil.

Ainda vou procurar uma ide pra desenvolver.

Um abraço a todos. :slight_smile:

_fs

Laszlo é bom demais :slight_smile: e bonitão também :smiley:

Tem um plugin pro Eclipse, LaszloIDE :thumbup:

cv1

O plugin pra Eclipse do Lazlo eh bem legalzinho. Vale a pena dar uma conferida. :wink:

R

É bonitão e funcional!
Tem um monte de componentes já prontinhos pra usar.
Estou adorando o carinha!
É muito gostoso!

Obrigado pelas dicar! Vou testar o LaszloIDE.

Abraços.

luis.txt

revivendo este tópico…

este lazlo é free??

como este tópico é de 2005… alguem sabe se há algum plugin melhor sendo utilizado?

valeu pessoal…

D

pessoal, alguem sabe me dizer oq esta errado nesse programa aq?
ele esta dando erro no char desde ja agradeço vlw abraço//

import java.util.Scanner;
public class UsaOperacoes

{

public static void main(String args[])

{
Decisão d = new Decisão();
	
	Scanner util = new Scanner(System.in);
	
	char operador;
	
	System.out.println("Digite o primeiro numero a ser operado:");
	d.num1 = util.nextInt();
	System.out.println("Digite o segundo numero a ser operado:");
	d.num2 = util.nextInt();
	System.out.println("Digite o terceiro numero a ser operado:");
	d.num3 = util.nextInt();
	
	System.out.println("Digite uma das operação(*, +, -):");
	operador = util.next();
	
	d.multiplicar();
	d.subitracao();
	d.soma();
	
	
	
	
	
	if(operador == '*')
	{
		System.out.println("a multiplicação eh:" + d.multiplicar);
	}
	else if(operador == '-')
	{
		System.out.println("a subitração eh:" + d.sulbitracao);
	}
	else
	{
	
	System.out.println("a soma eh:" + d.soma);

	}
}

}

Criado 7 de março de 2005
Ultima resposta 16 de mai. de 2009
Respostas 26
Participantes 11