[Resolvido] Problema com posicionamente de botões

7 respostas
Allan2M

Forma correta, ele deveria aparecer sempre assim:
http://img153.imageshack.us/i/maneira1.jpg/

Porem as vezes eu do Run no codigo e não apareçe o botão:
http://img690.imageshack.us/i/maneira2a.jpg/

Se eu minimizar e restaurar o botão apareçe no centro com o tamanho incorreto:
http://img709.imageshack.us/img709/3880/maneira2b.jpg

PS: As 3 Schenshots foram tiradas sem mudar 1 linha no source, apenas dando Run novamente.

Segue o codigo:
import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class janela extends JFrame {

	private JLabel aJanela;
	
public janela() {
	
	super("Daxsys - Sistema de automação de Cancelas");
	setLayout(new FlowLayout());
    Point centro = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
    int largJanela = 800;
    int altJanela = 600;
	setBounds(centro.x - largJanela / 2, centro.y - altJanela / 2, largJanela, altJanela);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setIconImage(new ImageIcon("C:\\Users\\Daxsys\\Pictures\\icone.jpg").getImage());
	setVisible(true);
	setLayout(new FlowLayout());
	
	/*Botões*/
	ImageIcon iCadastrar = new ImageIcon("C:\\Users\\Daxsys\\Pictures\\cadastrar.png");
	JButton bCadastrar = new JButton(iCadastrar);
	bCadastrar.setBounds(10, 10, 120, 150);
	bCadastrar.setActionCommand("Cadastrar");
	add(bCadastrar);
	
}
}
public class Aplicação{
public static void main(String[] args){

	janela principal = new janela();
	
	
}
}

@edit

Achei o erro, eu estava usando
setLayout(new FlowLayout());
Então o setLayout assumia o Layout coloquei
setLayout(null);

E funcionou, foi falta de atenção minha

Obrigado thiagolopes por tudo.

7 Respostas

thiagolopes

Amigo tente mudar as seguintes linhas de comando para ver se você nota algum resultado.

O construtor ficaria mais ou menos assim:

public  janela() {  
       
     super("Daxsys - Sistema de automação de Cancelas");  
     //[b]Seria facultativo você declarar o gerenciador de layouts abaixo, visto que o FlowLayout é padrão no //java[/b]
     setLayout(new FlowLayout());  
     Point centro = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();  
     int largJanela = 800;  
     int altJanela = 600;  
     setBounds(centro.x - largJanela / 2, centro.y - altJanela / 2, largJanela, altJanela);  
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
     setIconImage(new ImageIcon("C:\\Users\\Daxsys\\Pictures\\icone.jpg").getImage());  
      
     /*Botões*/  
     ImageIcon iCadastrar = new ImageIcon("C:\\Users\\Daxsys\\Pictures\\cadastrar.png");  
    JButton bCadastrar = new JButton(iCadastrar);  
     bCadastrar.setBounds(10, 10, 120, 150);  
     bCadastrar.setActionCommand("Cadastrar");  
     add(bCadastrar);  
     setVisible(true);  
 }  
 }

Tenta rodar o código acima para ver se da algum resultado no problema.Uma dica que eu do é sempre deixar a chamada do método setVisible(true);.

Allan2M

thiagolopes:
Amigo tente mudar as seguintes linhas de comando para ver se você nota algum resultado.

O construtor ficaria mais ou menos assim:

public  janela() {  
       
     super("Daxsys - Sistema de automação de Cancelas");  
     //[b]Seria facultativo você declarar o gerenciador de layouts abaixo, visto que o FlowLayout é padrão no //java[/b]
     setLayout(new FlowLayout());  
     Point centro = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();  
     int largJanela = 800;  
     int altJanela = 600;  
     setBounds(centro.x - largJanela / 2, centro.y - altJanela / 2, largJanela, altJanela);  
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
     setIconImage(new ImageIcon("C:\\Users\\Daxsys\\Pictures\\icone.jpg").getImage());  
      
     /*Botões*/  
     ImageIcon iCadastrar = new ImageIcon("C:\\Users\\Daxsys\\Pictures\\cadastrar.png");  
    JButton bCadastrar = new JButton(iCadastrar);  
     bCadastrar.setBounds(10, 10, 120, 150);  
     bCadastrar.setActionCommand("Cadastrar");  
     add(bCadastrar);  
     setVisible(true);  
 }  
 }

Tenta rodar o código acima para ver se da algum resultado no problema.Uma dica que eu do é sempre deixar a chamada do método setVisible(true);.

Thiago, tentei fazer o que você falou, porem agora toda vez que eu inicio fica como na imagem 3
http://img709.imageshack.us/img709/3880/maneira2b.jpg

Depois dessa modificação o botão parou de obdecer as ordens do setBounds, ele apareçe no centro da tela e com tamanho diferente do denifinido no bCadastrar.setBounds(10, 10, 120, 150);

thiagolopes

Nao entendi, no caso você quer q o JButton fica do lado esquerdo, conforme figura 01.É isto mesmo ?

Allan2M

Isso mesmo deveria ser como na imagem 1, antes deu modificar o codigo como você mencionou ele as vezes executava do lado esquerdo com tamanho 150, 120 e as vezes no centro com tamanho incorreto

Agora, depois da modificação ele sempre executa no centro com tamanho incorreto.

ImageIcon iCadastrar = new ImageIcon("C:\\Users\\Daxsys\\Pictures\\cadastrar.png"); JButton bCadastrar = new JButton(iCadastrar); bCadastrar.setBounds(10, 10, 120, 150); bCadastrar.setActionCommand("Cadastrar"); add(bCadastrar); setVisible(true);

thiagolopes

Amigo eu alterei o código abaixo:

--
setLayout(new FlowLayout(FlowLayout.LEFT));       
       getContentPane().add(bCadastrar);
       setVisible(true);
thiagolopes

Como você conseguiu resolver o problema?

Allan2M

Mudei disso:

setLayout(new FlowLayout());

Para isso:

setLayout(null);

Não consigo acreditar que perdi minha manha inteira nisso uma coisa tão boba, foi falta de atenção da minha parte :cry:

Criado 26 de abril de 2010
Ultima resposta 26 de abr. de 2010
Respostas 7
Participantes 2