Layout

9 respostas
denisspitfire

Aqui esta com border layout, dai todo arquivo ele vai com um botao a mais para a direita. E se eu quiser que ele fique um em baixo do outro?

public class Transferidor extends JFrame {

	private JButton button = new JButton();
	private JPanel painel = new JPanel();
	private String caminho = "C:/impressoes/";
	private File arquivo = new File(caminho);
	private File[] listaArquivos = arquivo.listFiles();

	public Transferidor() {
		super("Transferidor");
	}

	private void montaJanela() {
		for (int i = 0; i <listaArquivos.length; i++) {
			
			if (listaArquivos[i].isFile()) {
				button = new JButton(listaArquivos[i].getName());
				painel.add(button);
			}
		}
		getContentPane().add(painel, BorderLayout.CENTER);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);
	}

	public static void main(String[] args) {
		Transferidor s = new Transferidor();
		s.montaJanela();
	}
}

9 Respostas

InicianteJavaHenriqu

Você pode mudar de gerenciador de layout :!: :?:

:thumbup:

denisspitfire

é essa a ideia… quero saber qual. tentei o grid mas nao consegui fazer funcionar. Nem sei se é o grid mesmo kkk

Eric_Yuzo

http://www.guj.com.br/java/271206-flowlayout-vertical#1422329

InicianteJavaHenriqu

Então tanto o flowlayout quanto o gridlayout resolvem.

:thumbup:

R_chieck

Ola, se ver bem seu código voce está inserindo o jpanel no centro:

BorderLayout.CENTER

podes mudar a posição colocando o jpanel no norte e o botao no sul POR EXEMPLO

pois conforme o seu codigo o botao não tem posição especifica.

se for mudar de layout recomendo o NULL

jframe.setLayout(null);

este não tera nenhum destes controles
ou o absoluto tambem.

nestes voce apenas coloca os componentes em uma posição X, Y e com uma tamanho width e height
e ali vão estar e ficar.

denisspitfire

esse grid tah me irritando kkk na verdade nao gosto mto de GUI mas blz… vamos lá

al.barbosa

denisspitfire,

Queria acrescentar que o layout que está sendo aplicado no exemplo que você apresentou (classe Transferidor) não é o BorderLayout. O layout que está sendo aplicado é o FlowLayout, que é o layout default para os JPanels. Para usar o BorderLayout, você precisaria colocar o código abaixo:

Mas isso não iria resolver o problema, porque inserindo os botões com BorderLayout.CENTER eles ficariam todos sobrepostos no centro.

Eric_Yuzo

A forma mais fácil de colocar os componentes um em baixo do outro é com o BoxLayout. No link que postei acima tem até um exemplo de uso.

GridLayout pode ser configurado com apenas uma coluna, o que vai fazer os componentes ficarem um em baixo do outro, mas eles vão se redimensionar para ocupar todo o grid, o que pode deixar os botões com um tamanho não desejado.

FlowLayout vai colocando os componentes um do lado do outro mesmo. Ele só vai quebrar a linha quando não houver mais espaço horizontal no painel.

Ainda daria pra fazer usando GriBagLayout, mas para este caso em específico, acho que não compensa o esforço. Eu iria de BoxLayout.

InicianteJavaHenriqu

não use setLayout(null); pois pode parecer fácil inicialmente posicionar os componentes em x e y, mas depois você não consegue manter este código.

:thumbup:

Criado 25 de maio de 2012
Ultima resposta 25 de mai. de 2012
Respostas 9
Participantes 5