Usar 2 JFrames?

5 respostas
K

Boas!!

Eu estou fazendo um programa que simula um elevador mas tenho um problema que não sei como resolver. Eu tenho uma jFrame inicial que recebe os dados para a construção do meu programa(como o nº de pisos, nº de elevadores,…), estes dados sao enviados e é criada uma nova jFrame que vai mostrar a simulação do movimento dos elevadores, mas o problema está, quando é aberta a 2ª jFrame, só é mostrada a ultima posiçao do elevador e não o movimento deste. Eu ja tentei utilizar dados fixos, ou seja a 1ª JFrame não e criada e assim o movimento do elevador já é mostrado. Como posso resolver isso?

5 Respostas

lina

Oi,

Será que não entendi a sua pergunta pq agora virei loira? Oo

Bom, a questão é: Como você está armazenando as informações do movimento? em qual tipo de variavel ?

Tchauzin!

A

cara tu tem que colocar uma Thread para fazer ele ir mostrando a elevação posta o codigo ai para ver se isso mesmo que voce quer

dstori

Assim como o acichele falou, voce deve criar uma thread para repintar o frame a todo momento.

Segue um exemplo de código:

public class ElevatorFrame extends JFrame {

	public ElevatorFrame() {
		
		super("Elevator Example");
		
		final JFrame frame = this;
		
		Thread thread = new Thread() {
			public void run() {
				
				while (this == Thread.currentThread()) {
					frame.repaint();
					position++;
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		};
		thread.start();
		
		this.setSize(320, 200);
		this.setVisible(true);
	}
	
	int position = 0;
	
	public void paint(Graphics g) {
		
		g.setColor(Color.white);
		g.fillRect(0, 0, this.getWidth(), this.getHeight());
		
		g.setColor(Color.red);
		g.fillRect(100, position, 30, 30);
	}

	public static void main(String[] args) {
		new ElevatorFrame();
	}
}
K

Eu se calhar não me expliquei bem. O problema não e mostrar o movimento do elevador, mas sim quando a 2ª frame abre ela não mostra nada, só mostra quando a elevador atinge a ultima posição, ou seja, a frame é aberta mas não aparece nada, só aparece quando atinge a ultima posiçao. Eu já experimentei usar so uma frame e mostra o movimento todo, mas quando eu abro a 1ª frame onde sao introduzidos os valores necessarios e é chamada a 2ª frame que deveria mostrar o movimento dos elevadores e os andares acontece isto

K

Eu estive a tentar adaptar o codigo que colocaram aqui ao meu mas continou sem conseguir fazer. Vou deixar aqui o meu codigo para ver se alguem me pode ajudar:

Criei esta frame que vai conter um JPanel que servira para desenhar o elevador

public class PredioVirtual extends javax.swing.JFrame implements Observer{
  
    public Grafico(Predio p)  {
        initComponents();        
             
        JPanel painelDesenho = new DesenhoElevador(p.getElevador());

        this.getContentPane().add(painelDesenho);
        this.setVisible(true);
    }

    public void update(Observable arg0, Object arg1) {
        
        if(arg0 instanceof Predio) {
            this.repaint();
        }
    }
}
public class DesenhoElevador extends JPanel{

    private Elevador e;
    
    public DesenhoElevador(Elevador e){
        
        this.e=e;
        
    }

    public void paint(Graphics g){
        Graphics2D g2=(Graphics2D)g;
        RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2.setRenderingHints(rh);
        Rectangle2D.Float rect=new Rectangle2D.Float(e.getX(),e.getY(),20,20);
        g2.draw(rect);
        g2.setColor(Color.BLACK);
        g2.fill(rect);
       

    }
}

Depois dentro da classe Predio tenho o metodo que faz mover o elevador

public void mover() {
        
            for(int i=0;i<6;i++){
                e.mover();
                this.setChanged();
                notifyObservers();      
            }     
    }

Se alguem me poder ajudar eu agradeço

Criado 14 de agosto de 2009
Ultima resposta 15 de ago. de 2009
Respostas 5
Participantes 4