Java interface

Olá, bem eu sou iniciante em java e comecei tentando criar interface gráfica pelo netbeans mas só que eu não gostei muito porque ele nao deixa você manipula todo o código que é criado e eu acho que dificulta a organização do código, então comecei a ver como criar interfaces na mão mesmo, não parece muito trabalhoso, no entanto surgiram algumas dúvidas :
Toda vez que eu crio um formulário(botão, campo de texto, label…) mesmo eu definindo o seu tamanho com o JButton.setSize, ele ocupa todo o tamanho da janela, tentei criar um outro pra ver se assim eles iriam se ajustar mas não deu certo também, o código que eu fiz foi esse :

public class teste_Interface {

	private JFrame janela;
	private JButton botao;
	
	public JButton MontaBotao(String caption, int width, int heigth, int x, int y)
	{
		botao = new JButton();
		botao.setText(caption);
		botao.setLocation(x, y);
		botao.setSize(width, heigth);
		
		return botao;
	}
	
	public void MontaJanela()
	{
		janela = new JFrame();
		janela.setSize(900, 500);
		
		janela.add(MontaBotao("Click me!", 30, 30, 50, 50));
		
		janela.setVisible(true);
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new teste_Interface().MontaJanela();
	}

}

Como eu consigo colocá-lo do tamanho que eu quiser?

Outra dúvida também é como eu crio eventos pros formulários?

Agradeço a quem puder ajudar.
=]

O botão está ocupando toda a tela porque o gerenciador de layout default do JFrame é BorderLayout, para que o setLocation(x, y); funcione você deve setar o layout como null (porém, é melhor que você não faça isto), porque em telas com muitos componentes será inviável você ficar setando o tamanho e localização de cada componente), aprenda como cada gerenciador de layout funciona e não terá mais problemas.

:thumbup:

Sobre os eventos:

:arrow: http://docs.oracle.com/javase/tutorial/uiswing/events/index.html

:arrow: http://docs.oracle.com/javase/tutorial/uiswing/events/handling.html

:thumbup:

Por que não usa o Google Window Toolkit no Eclipse?

Henrique valeu pela ajuda, consegui fazer isso utilizando o JPanel, ainda não vi dos eventos mas já vou ver… =]
ViniGodoy nunca vi isso, mas vou dar uma olhada no que é.
Agrdeço a todos pela ajuda de voces.

Olá Shoxsz.
A solução é simples: NÀO USAR LAYOUT MANANGERS. E tudo fica simples e organizado no Netbeans.

Clique com o botão direito do mouse sobre o formulário, aparece um menu, escolha Set Layout->Null Lauyout.

A questão que está a atrapalhar são os gerenciadores de layout. O objectivo deles é fazer com que à medida que o usuário vai redimensionando a janela os componentes mudem de tamanho e se reorganizem.
O problema deles é que cada um é diferente do outro, tem critérios diferentes e muitas vezes é complicado compreender, principalmente para quem está habituado a por uma coisa num lugar e deixar ela lá.

[quote=Clercio Guiliche]Olá Shoxsz.
A solução é simples: NÀO USAR LAYOUT MANANGERS. E tudo fica simples e organizado no Netbeans.

Clique com o botão direito do mouse sobre o formulário, aparece um menu, escolha Set Layout->Null Lauyout.

A questão que está a atrapalhar são os gerenciadores de layout. O objectivo deles é fazer com que à medida que o usuário vai redimensionando a janela os componentes mudem de tamanho e se reorganizem.
O problema deles é que cada um é diferente do outro, tem critérios diferentes e muitas vezes é complicado compreender, principalmente para quem está habituado a por uma coisa num lugar e deixar ela lá.
[/quote]

Aceite esse conselho e você automáticamente vira um POGramador.

Sem layout managers, além de mais difícil, sua app deixa de ser multiplataforma, deixa de ser redimensionável e por incrível que pareça, é mais difícil de construir.

O negócio é deixar a preguiça de lado e aprender a fazer a coisa do jeito certo.

[quote=ViniGodoy][quote=Clercio Guiliche]Olá Shoxsz.
A solução é simples: NÀO USAR LAYOUT MANANGERS. E tudo fica simples e organizado no Netbeans.

Clique com o botão direito do mouse sobre o formulário, aparece um menu, escolha Set Layout->Null Lauyout.

A questão que está a atrapalhar são os gerenciadores de layout. O objectivo deles é fazer com que à medida que o usuário vai redimensionando a janela os componentes mudem de tamanho e se reorganizem.
O problema deles é que cada um é diferente do outro, tem critérios diferentes e muitas vezes é complicado compreender, principalmente para quem está habituado a por uma coisa num lugar e deixar ela lá.
[/quote]

Aceite esse conselho e você automáticamente vira um POGramador.

Sem layout managers, além de mais difícil, sua app deixa de ser multiplataforma, deixa de ser redimensionável e por incrível que pareça, é mais difícil de construir.

O negócio é deixar a preguiça de lado e aprender a fazer a coisa do jeito certo.[/quote]

Eu acho gerenciador de layout um negócio chato demais de usar. O gerenciador de layout mais razoável que vi no momento foi o GroupLayout que vem integrado no WindowBuilder do Eclipse.
O grande problema que vejo no uso dos gerenciadores de layout é que o código fica horrivelmente complexo de uma forma muito rápida, de acordo com a complexidade da tela.

[quote=matheuslmota]Eu acho gerenciador de layout um negócio chato demais de usar. O gerenciador de layout mais razoável que vi no momento foi o GroupLayout que vem integrado no WindowBuilder do Eclipse.
O grande problema que vejo no uso dos gerenciadores de layout é que o código fica horrivelmente complexo de uma forma muito rápida, de acordo com a complexidade da tela.[/quote]

Você já tentou usar o MigLayout?

Tente fazer o que os gerenciadores fazem na mão, e você vai ver o que é um código complexo e chato de fazer. Quando eu programava em VB6, tive que fazer telas redimensionáveis… rapaz, é um bom exercício de matemática.

Acho estranho que, quem muda do Java para web, não reclama de ter que aprender diversas propriedades de divs, e de ajustar na mão as várias opções do css. A pessoa genuinamente vence a curva de aprendizado, feliz de estar aprendendo algo novo.

Chega no desktop, o cara quer que um construtor gráfico faça todo trabalho por ele. Os tempos mudaram. Não existe mais essa história de programar só para uma plataforma, agora, o desenvolvimento precisa prever várias resoluções, diferentes fontes e ambientes de janelas.

Com isso, você passa a ser obrigado a recorrer aos gerenciadores de layout. Mesmo o C#, que muita gente fala que tem um construtor de janelas ótimo, usa gerenciadores de layout. APIs em C++, como QT, também usam. Não se faz mais software sem eles: são os divs do desktop.

Se você usar corretamente gerenciadores como BorderLayout, GroupLayout e FlowLayout, o código fica relativamente simples. Os construtores de janelas, como o Google Web Toolkit e o Matisse automatizam boa parte do trabalho, e você não precisa manter esse código diretamente. Na verdade, o GWT, se configurado corretamente, gera um código bastante limpo e legível.

Entretanto, existe mesmo uma curva de aprendizado, e é necessário vencê-la.

PS: Eu até concordo em usar o null layout enquanto está se aprendendo Swing, para deixar para depois o aprendizado dos gerenciadores de layout. Também acho que eles são um tema complexo para quem ainda mal sabe fazer um botão funcionar.

Entretanto, acho imprudente aparecer no GUJ e dizer que deixar o layout null é a solução simples para todos os problemas, sem explicar as consequências disso.

Até podemos recomendar que o iniciante use null no começo, mas sempre com a ressalva de que esse é o jeito incorreto de fazer, que trás más consequencias, e que esse é um tema que ele terá necessariamente que ver no futuro, caso decida iniciar no desenvolvimento profissional de aplicações desktop.

[quote=ViniGodoy][quote=matheuslmota]Eu acho gerenciador de layout um negócio chato demais de usar. O gerenciador de layout mais razoável que vi no momento foi o GroupLayout que vem integrado no WindowBuilder do Eclipse.
O grande problema que vejo no uso dos gerenciadores de layout é que o código fica horrivelmente complexo de uma forma muito rápida, de acordo com a complexidade da tela.[/quote]

Você já tentou usar o MigLayout?

Tente fazer o que os gerenciadores fazem na mão, e você vai ver o que é um código complexo e chato de fazer. Quando eu programava em VB6, tive que fazer telas redimensionáveis… rapaz, é um bom exercício de matemática.

Acho estranho que, quem muda do Java para web, não reclama de ter que aprender diversas propriedades de divs, e de ajustar na mão as várias opções do css. A pessoa genuinamente vence a curva de aprendizado, feliz de estar aprendendo algo novo.

Chega no desktop, o cara quer que um construtor gráfico faça todo trabalho por ele. Os tempos mudaram. Não existe mais essa história de programar só para uma plataforma, agora, o desenvolvimento precisa prever várias resoluções, diferentes fontes e ambientes de janelas.

Com isso, você passa a ser obrigado a recorrer aos gerenciadores de layout. Mesmo o C#, que muita gente fala que tem um construtor de janelas ótimo, usa gerenciadores de layout. APIs em C++, como QT, também usam. Não se faz mais software sem eles: são os divs do desktop.

Se você usar corretamente gerenciadores como BorderLayout, GroupLayout e FlowLayout, o código fica relativamente simples. Os construtores de janelas, como o Google Web Toolkit e o Matisse automatizam boa parte do trabalho, e você não precisa manter esse código diretamente. Na verdade, o GWT, se configurado corretamente, gera um código bastante limpo e legível.

Entretanto, existe mesmo uma curva de aprendizado, e é necessário vencê-la.[/quote]

Ainda não usei o MigLayout, mas irei testá-lo.
Gerenciadores de layout ainda não deixam o layout multi-plataforma, como era de se esperar. O desenvolvedor ainda tem que configurar algumas coisas para a interface se ajustar direitinho entre os diversos SO’s. Caso contrário, haverão componentes que ficarão desalinhados, textos usando fontes diferentes, bordas de janelas diferentes e um monte de outras coisas chatinhas.

[quote=matheuslmota]Ainda não usei o MigLayout, mas irei testá-lo.
Gerenciadores de layout ainda não deixam o layout multi-plataforma, como era de se esperar. O desenvolvedor ainda tem que configurar algumas coisas para a interface se ajustar direitinho entre os diversos SO’s. Caso contrário, haverão componentes que ficarão desalinhados, textos usando fontes diferentes, bordas de janelas diferentes e um monte de outras coisas chatinhas.[/quote]

Evidente que não. Mas digamos que é melhor quebrar 10% do seu layout, do que 80%.
E, sem eles, multiplataforma está praticamente fora de cogitação.

[quote=ViniGodoy][quote=matheuslmota]Ainda não usei o MigLayout, mas irei testá-lo.
Gerenciadores de layout ainda não deixam o layout multi-plataforma, como era de se esperar. O desenvolvedor ainda tem que configurar algumas coisas para a interface se ajustar direitinho entre os diversos SO’s. Caso contrário, haverão componentes que ficarão desalinhados, textos usando fontes diferentes, bordas de janelas diferentes e um monte de outras coisas chatinhas.[/quote]

Evidente que não. Mas digamos que é melhor quebrar 10% do seu layout, do que 80%.
E, sem eles, multiplataforma está praticamente fora de cogitação.[/quote]

É mesmo, tem razão. Boas explicações Vini.

Aproveitando a conversa, sabe dizer se tem algum manual de boas práticas com Swing?

Além desse link:
http://www.guj.com.br/java/104644-novo-em-swing#565211

Tem alguns livros legais:


http://www.amazon.com/Swing-Second-Edition-James-Elliott/dp/0596004087/ref=sr_1_2?ie=UTF8&qid=1342283136&sr=8-2&keywords=Swing+java (um pouco velho, mas fácil de achar na net)
http://www.amazon.com/Swing-Second-Edition-Matthew-Robinson/dp/193011088X/ref=sr_1_4?ie=UTF8&qid=1342283136&sr=8-4&keywords=Swing+java

[quote=ViniGodoy]Além desse link:
http://www.guj.com.br/java/104644-novo-em-swing#565211

Tem alguns livros legais:


http://www.amazon.com/Swing-Second-Edition-James-Elliott/dp/0596004087/ref=sr_1_2?ie=UTF8&qid=1342283136&sr=8-2&keywords=Swing+java (um pouco velho, mas fácil de achar na net)
http://www.amazon.com/Swing-Second-Edition-Matthew-Robinson/dp/193011088X/ref=sr_1_4?ie=UTF8&qid=1342283136&sr=8-4&keywords=Swing+java[/quote]
Obrigado!