Limitar area de movimentação de uma janela

2 respostas
P

Criei uma sub janela Modal, a aprtir de um JFrame e a partir da propria classe JDialog , e gostaria de limitar a area de movimentação desta janela Modal dentro da area da janela principal.

Como posso fazer isto?

Obrigado.

2 Respostas

P

Boa Noite senhor.

Creio que nesses caso você terá que fazer uma verificação de coordenadas a coordenadas pegando as coordenas(x,y) da janela principal somando com o tamanho e a largura e cuida para que a janela filho fique dentro dessa area.

import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.JDialog;
import javax.swing.JFrame;


public class Janela {
	
	public static void main(String args[]) { 
		
		final JFrame frame = new JFrame();
		frame.setSize(new Dimension(500,500));
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		final JDialog dialogo = new JDialog(frame);
		dialogo.setSize(new Dimension(100, 100));
		dialogo.addComponentListener(new ComponentListener() {
			public void componentHidden(ComponentEvent e) {
			}
			public void componentMoved(ComponentEvent e) {
				Point posDialogo = dialogo.getLocationOnScreen();
				Point posFrame = frame.getLocationOnScreen();
				
				Point novoPonto = ajustarJanelaDentroArea(new Point(posDialogo.x, posDialogo.y), new Point(posFrame.x, posFrame.y));
				dialogo.setLocation(novoPonto.x, novoPonto.y);
			}

			public void componentResized(ComponentEvent e) {
			}

			public void componentShown(ComponentEvent e) {
			}
		});
		dialogo.setVisible(true);
		frame.addComponentListener(new ComponentListener() {
			public void componentHidden(ComponentEvent e) {
			}
			public void componentMoved(ComponentEvent e) {
				Point posDialogo = dialogo.getLocationOnScreen();
				Point posFrame = frame.getLocationOnScreen();
				
				Point novoPonto = ajustarJanelaDentroArea(new Point(posDialogo.x, posDialogo.y), new Point(posFrame.x, posFrame.y));
				dialogo.setLocation(novoPonto.x, novoPonto.y);
			}
			public void componentResized(ComponentEvent e) {
			}

			public void componentShown(ComponentEvent e) {
			}
		});
		frame.setVisible(true);
	}
	
	public static Point ajustarJanelaDentroArea(Point posF, Point posD) {
		if(posD.x < posF.x) posD.x = posF.x;
		if(posD.y < posF.y) posD.y = posF.y;
		
		return posD;
	}
}

É mais ou menons assim esse exemplo só está verificando a saida da janela filho por cima e pelo lado esquerda agora é só implementar a saida por baixo e pelo lado direito.Deve ter alguma forma melhor mais por enquanto dá uma olhada nisso.Qualquer dúvida estou por aqui.

P

Origado Pelom, irei testar.

Criado 23 de julho de 2007
Ultima resposta 23 de jul. de 2007
Respostas 2
Participantes 2