Swing - Como posicionar um elemento

8 respostas
G

Ola,

Sou novo aqui no GUJ e estou fazendo um jogo em swing bem simples, um puzzle e gostaria de saber como faço para posicionar um componente no frame ( qualquer X e Y que eu quiser).

Grato.

8 Respostas

diego2005

O melhor seria você usar gerenciadores de layout…

T+

G

Sim eu sei que posso usar o gerenciador de layout mas é possivel fazer com que um elemento fique em qualquer posição do frame.

ViniGodoy

É sim. Basta fazer setLayout(null) no seu ContentPane e usar o método setBounds dos seus componentes.

Mas se você vai fazer um jogo, talvez o interessante você pintar o seu JFrame diretamente, sobrescrevendo o método paint.
Que tipo de puzzle vc está fazendo?

ViniGodoy

By the way, consulte o tutorial do Space Invaders no site do Coke and Code:
http://www.cokeandcode.com/node/6

E o seguinte livro (disponível online):
http://fivedots.coe.psu.ac.th/~ad/jg/

Eles são ótimos para te ensinar a fazer jogos em java! :slight_smile:

G

É possivel fazer com que os elementos deslisem? … um efeito de movimento.

ViniGodoy

Dá uma olhada lá no Coke and Code. O space invaders tem aliens mexendo o tempo todo! :slight_smile:

A maior parte dos games roda no seguinte loop:

while (oJogoNaoAcabou) { leEventosDoTeclado(); processaLogica(); pintaATela(); }

Para fazer uma imagem se deslocar, basta somar um pouco o x e y dela a cara passo. Como esse laço deve rodar pelo menos umas 60 vezes por segundo, a impressão que seu usuário terá é de ela está mexendo.

G

Ola,

Aproveitando o mesmo topico… estava executando o codigo abaixo com o efeito que eu estava esperando, mas teve um detalhe que não gostei… pois quando faço o movimento do texto(ou imagem) o mesmo texto continua na posição inicial e quando termina a iteração o texto da posição inicial some… Existe uma maneira de resolver isto?

public static void main(String[] args) {
		JFrame frame;
		JLabel label;
		JTextField field;
		
		Point point;
		Dimension dimension;
		Icon icon; 
		
		Container container;
		
		/**
		 * Seta parametro para um start na janela 
		 */
		frame = new JFrame("Novo Janela");
		
		point = new Point(312, 300);
		frame.setLocation(point);
		
		dimension = new Dimension(400, 300);
		frame.setSize(dimension);
		
		frame.setVisible(true);
		/**
		 * Descubrir como setar qualquer posição no frame
		 */
		
		container = frame.getContentPane();
		
		container.setLayout( null );
		
		/**
		 * Adiciona uma imagem no frame
		 */
		//icon = new ImageIcon("./img/1000imagens.jpg");
		//label = new JLabel(icon);
		label = new JLabel("Teste");
		int i = -1;
		while (++i < 100) {
			label.setBounds(i + 10, i + 10, 100, 20);
			container.add(label);
			frame.setContentPane(container);
		}
		
		//System.exit(-1);
	}

Grato.

ViniGodoy

O ideal, mais fácil e mais simples, no caso de um jogo, é você mesmo pintar a tela, sobrescrevendo o paintComponent no JPanel ou JFrame.
Você chegou a dar uma olhada nos tutoriais que eu te passei?

Também confira esse link: http://java.sun.com/products/jfc/tsc/articles/painting/index.html#swing
E esse: http://java.sun.com/j2se/1.5.0/docs/guide/2d/spec/j2d-bookTOC.html

Mexer com os bounds de um componente dessa forma costuma a dar um péssimo resultado.

Criado 9 de novembro de 2007
Ultima resposta 12 de nov. de 2007
Respostas 8
Participantes 3