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.
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.
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.
Origado Pelom, irei testar.