Adicionando um BorderLayout em uma JFrame

6 respostas
V

Boa tarde pessoal.

Então gostaria de saber se tem como eu adicionar um BorderLayout somente na parte de baixo de um Jframe.

Pois na JFrame usarei para caregar uma imagem, e mais tarde desenhar outros elementos e ações como o MouseListener.

E neste BorderLayout preciso que tenha um Button.

Grata deste já.

6 Respostas

D

Olá

Acho que entendi sua dúvida, se vc fizer o seguinte:

//Seu frame
JFrame frame = new JFrame()
frame.setLayout(new BorderLayout());

//comp é seu componente, pode ser JButton, JPanel etc...
add(BorderLayout.SOUTH, comp);

Assim seu componente vai ficar no inferior do Jframe.

Editado: Tem um link como referência para esse tipo de layout,
Espero ter ajudado
Flwss

V

hum…na verdade é mais ou menos

V

Na verdade, eu queria criar um BorderLayout na parte sul do JFrame
onde eu posso adicionar um JTextField do lado esquerdo e um JButton do lado esquedo do BorderLayout .

olha isso é mais ou menos o que eu queria, mais no lugar do JButton, eu queria add mais coisas

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.LayoutManager;
import java.awt.geom.AffineTransform;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.swing.*;

/* FrameDemo.java requires no other files. */
public class TesteNovo1 extends JFrame {
    
	private static final long serialVersionUID = 1L;
	private Image img;
	private static JFrame frame;
	
    public TesteNovo1() 
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
        fundo();
        
        JButton b1 = new JButton("button1");
        b1.setPreferredSize(new Dimension(175, 100));
        JButton b2 = new JButton("button2");
        b1.setPreferredSize(new Dimension(175, 100));
      
        // se eu marco os dois, ele sobreescreve o outro
        this.getContentPane().add(b1, BorderLayout.SOUTH);
        //this.getContentPane().add(b2, BorderLayout.SOUTH);
        
        frame.setLayout(new BorderLayout());
        add(b1);
        add(b2);
    }

	/**
	 * Carrega a imagem de fundo, e chama o metodo que ira desenhar os lotes. 
	 */
	public void fundo()
	{
		// Carrega imagem na memoria para evitar todo repaint buscar em disco
		byte [] imagem = carregaImagem();
		img = new ImageIcon(imagem).getImage();
		/**
		 * Esta é uma classe anônima. Um componente que pinta uma imagem
		 */
		JComponent comp = new JComponent() 
		{
			private static final long serialVersionUID = 1L;
			protected void paintComponent(Graphics g) 
			{
				// Transformar para graphics 2d
				Graphics2D g2d = (Graphics2D) g;
				AffineTransform tx = new AffineTransform();
				Dimension tam = getSize();
				//Regrinha de 3: Ajusta a altura e largura da imagem de acordo
				// com o tamanho da frame
				double x = tam.width / (double) img.getWidth(null);
				double y = tam.height / (double) img.getHeight(null);
				tx.scale(x, y);
				// Pinta a imagem
				g2d.drawImage(img, tx, this);				
			}		
		};
		setSize(800, 600);
		JScrollPane scroll = new JScrollPane(comp);
		add(scroll);
		
	}

	/**
	 * Carrega a imagem de fundo 
	 **/
	private byte[] carregaImagem() 
	{
		try 
		{			
			File f = new File("resources/background.jpg");
			FileInputStream fis = new FileInputStream(f);
			byte [] imagem = new byte[(int) f.length()];
			int qtdLido = fis.read(imagem);			
			if(qtdLido != f.length()) 
				throw new RuntimeException("Erro na leitura do arquivo");					
			return imagem;
		} catch (IOException e) {
			throw new RuntimeException("Erro ao ler imagem",e);
		}
	}
    
    public static void main(String[] args) {
		frame = new TesteNovo1();
    }
}
D

Olá
Para colocar mais de um componente no “mesmo lugar”, nos utilizamos o JPanel…
dai nele vc tb pode setar layout diversos…

Flwsss

V

:slight_smile:

V

Consegui fazer de outro jeito.

Mais vlw pela ajuda.

Grata

Criado 20 de abril de 2009
Ultima resposta 21 de abr. de 2009
Respostas 6
Participantes 2