Problemas com setSize no JFrame

10 respostas
A

Tenho uma imagem e pego a largura e altura dela. Gostaria de fazer ela ficar “justa” no Jframe, sem sobrar espaços.
Eu coloco a imagem e uso o setSize no JFrame pegando a largura e a altura da imagem, porém, se eu aumentar o JFrame (clicando e arrastando a borda), eu posso ver que não aparece a imagem toda, mas sim um pedaço dela (as partes de cima e de baixo ficam cortadas). Porém, o tamanho do JFrame é o da imagem.

Alguem sbae como posso resolver isso?

10 Respostas

Andre_Brito

Opa!

Eu li em algum lugar que tinha que usar Insets, que são as áreas sem uso do seu Frame.

Eu faço de um outro jeito (que também funciona, mas não sei se é o mais aconselhável).

private void centralizarComponente(Container painel) {
        int larguraComponente = painel.getWidth();
        int alturaComponente = painel.getHeight();
        int x = (this.getWidth() / 2) - (larguraComponente / 2);
        int y = (this.getHeight() / 2) - (alturaComponente / 2);

        painel.setBounds(new Rectangle(x, y, larguraComponente, alturaComponente));
    }

Além disso, eu seto o layout do JFrame para null (this.setLayout(null)), o que também acredito ser algo não aconselhável :confused:
Se alguém souber uma maneira melhor de fazer seria legal :slight_smile:

ViniGodoy

Dê uma olhada na classe JImagePanel. Um dos modos de pintura dela redimensiona a imagem para você:
http://www.guj.com.br/posts/list/56248.java#295271

A

ViniGodoy,

Eu vi o código, mas lá tem como centralizar a imagem no painel e não o painel no Jframe.

neoCortex
asd:
Tenho uma imagem e pego a largura e altura dela. Gostaria de fazer ela ficar "justa" no Jframe, sem sobrar espaços. Eu coloco a imagem e uso o setSize no JFrame pegando a largura e a altura da imagem, porém, se eu aumentar o JFrame (clicando e arrastando a borda), eu posso ver que não aparece a imagem toda, mas sim um pedaço dela (as partes de cima e de baixo ficam cortadas). Porém, o tamanho do JFrame é o da imagem.

Olhe meu código, fiz para ver se resolve especialmente seu problema. Levei em consideração que você quer redimensionar a imagem de acordo como a janela se redimensiona más, se não entender ou não for isso, me dá um toque. Indiferentemente tente entender a idéia sou péssimo em indentar código.

package classes;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;

public class FrmJanelaPrincipal extends JFrame implements ComponentListener{


	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Image principalPlanodeFundo =(Imagens.getImgWallpaperPredefined("lobo.jpg").getImage());
	private JDesktopPane dskPaneJanelaPrincipal = null;
//***********************************************************************************************************************//
//***********************************************************************************************************************//
//***********************************************************************************************************************//
	public FrmJanelaPrincipal(){
		super("Janela Principal");
		this.setSize(1024, 768);
		this.add(getDskPaneJanelaPrincipal());
		this.addComponentListener(this);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
//***********************************************************************************************************************//
//***********************************************************************************************************************//
//***********************************************************************************************************************//
	private JDesktopPane getDskPaneJanelaPrincipal(){
		if(dskPaneJanelaPrincipal == null){
		dskPaneJanelaPrincipal = new JDesktopPane(){
		private static final long serialVersionUID = -3854215518834175839L;

			public void paintComponent(Graphics g){
				g.drawImage(principalPlanodeFundo,0,0,this.getWidth(),this.getHeight(),this);}};}
		
		
		return dskPaneJanelaPrincipal;
	}
//***********************************************************************************************************************//
//***********************************************************************************************************************//
//***********************************************************************************************************************//
	
	
	@Override
	public void componentResized(ComponentEvent e) {
		this.repaint();
	}

		
}

e o Item que uso para pegar imagens em outra classe:

package classes;

import java.awt.Image;

import javax.swing.ImageIcon;

public class Imagens {
	
		
public static String getLocalidadeExecucao(){return	System.getProperty("user.dir").replaceAll("\\", "/");}
	
//*************************************************************************************************************************************//
//**********************************************Métodos estáticos para imagens gerais**************************************************// 
//*************************************************************************************************************************************//
	/**
	 * Imagens Utilizadas no Container taskPane e jinternalFrame
	 */
//*************************************************************************************************************************************//		
	public static ImageIcon getImgWallpaperPredefined(String image){return new ImageIcon(getLocalidadeExecucao() + "/Wallpapers/" + image);}
//*************************************************************************************************************************************//	
	public static ImageIcon getImgTexturaJanela(String image){return new ImageIcon(getLocalidadeExecucao() + "/Texturas/" + image);}
//	*************************************************************************************************************************************//
}

Um grande Abraço!

ViniGodoy

asd:
ViniGodoy,

Eu vi o código, mas lá tem como centralizar a imagem no painel e não o painel no Jframe.

Não entendi o que vc quer. Ou ele centraliza a imagem, ou ele redimensiona para caber no painel inteiro.

neoCortex

ViniGodoy:
asd:
ViniGodoy,

Eu vi o código, mas lá tem como centralizar a imagem no painel e não o painel no Jframe.

Não entendi o que vc quer. Ou ele centraliza a imagem, ou ele redimensiona para caber no painel inteiro.

Eu também achei estranho Vinicius más levei em conta que ele quer redimensionar a imagem de acordo com a janela e de forma automática e ativa.

Será se é isso que ele realmente quer???

Um Grande Abraço!!!

ViniGodoy

Mas, se você colocar o JPanel no centro de um BorderLayout, o painel se redimensiona automaticamente para o tamanho do Frame. E a imagem, para o tamanho (ou centro) do Panel, funcionando assim para a janela inteira.

A

aí é que ta. eu quero deixar o painel no centro, e nao do tamanho do jframe (usando algum gerenciador de layout).

ViniGodoy

Affe maria.

Põe um printscreen do que vc quer. Uma imagem vale mais do que mil palavras…

A

eu kero fazer isso usando um gerenciador de layoute

Criado 14 de dezembro de 2008
Ultima resposta 17 de dez. de 2008
Respostas 10
Participantes 4