Jump to content
Papi

Problema com actualizacao de panel

Recommended Posts

Papi

Aqui esta um exmplo muito simples do que pretendo fazer, pretendo actualizar um panel na frame, ou seja, num local tenho uma imagem e depois de uma accao de trocar para outra no mesmo local sem fechar a frame. so que no codigo que construi este mete uma imagem e depois a outra e depois disso vai  alternando sempre com as duas imagens no ecra e o que pretendia era alterar de imagem para imagem sendo que so deveria estar visivel uma das imagens de cada vez.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.util.Scanner;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Movs extends JFrame{

private static final long serialVersionUID = 1L;
private static JPanel jp= new JPanel(new GridBagLayout());
private static JLabel jb1=new JLabel(new ImageIcon("img\\im.jpg"));
private static JLabel jb2=new JLabel(new ImageIcon("img\\im2.jpg"));
private Container cp;

public Movs(){
	super("BatesMalMeu");

	this.setBackground(Color.ORANGE);
	this.setSize(600,600);
	this.setResizable(false);

	cp=this.getContentPane();

	int ct=0;
	int valor;
	Scanner t=new Scanner(System.in);
	while(ct!=15){
		System.out.println("Valor: ");
		valor=t.nextInt();
		actuaL(valor);
		ct++;
		jp.repaint();
		jp.revalidate();
	}	
}	
public void actuaL(int valor){
	if(valor==1){
		jp.add(jb1);
		cp.add(jp,BorderLayout.CENTER);
		this.setVisible(true);
	}		
	if(valor==2){
		jp.add(jb2);
		cp.add(jp,BorderLayout.CENTER);
		this.setVisible(true);
	}
	this.repaint();

}
public static void main (String[]args){
	new Movs().setVisible(true);
}

}

Share this post


Link to post
Share on other sites
socopo

Se há uma coisa que eu não gosto no Java é a parte gráfica  :thumbsup:

Mas tenta fazer jp.removeAll(), supostamente deverá remover todos os componentes do jp. Nunca experimentei atenção!

http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Container.html#removeAll%28%29

Podes tentar também com jp.removeLayoutComponent(Component comp), podes usar para retirar uma ou a outra imagem passando o objecto respectivo como parâmetro. Eu não ficava contente com esta solução mas suponho que podes usa-la numa função método para apagar conteúdos de determinada classe ou até todos, acho que é essa a ideia desse método como podes ver na descrição.

http://download.oracle.com/javase/1.4.2/docs/api/java/awt/GridBagLayout.html#removeLayoutComponent%28java.awt.Component%29

Já agora, Java disponibiliza uma muito boa documentação online, muitas vezes basta pesquisar lá para encontrar o que precisas  :cheesygrin: acredita!

Share this post


Link to post
Share on other sites
Papi

obrigado ja rwe

bastava fazer um removeall() e um repaint() antes do if e um revalidate ao painel e deixa de haver essse meu problema

Share this post


Link to post
Share on other sites
socopo

De nada... Bastou pesquisar um bocado  😎 para a próxima tenta procurar também. Java tem uma excelente documentação  :thumbsup:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.