Есть undecorated окно JFrame, которое я перемещаю вручную с помощью функции ниже. Получилось блокировать перемещения за левый и верхний края экрана, а вот с противоположными беда. В комментариях два способа, которыми я пробовал это сделать для правой границы. Они работают, но окно "скачет", вместо того, чтобы просто остановиться на краю экрана, как оно это делает с левым и верхним краем. Подскажите, как мне исправить функцию, чтобы она заработала как нужно?
функцияprivate void registerMouseEvents(JFrame parent) {
parent.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
mouseX = (int) e.getPoint().getX();
mouseY = (int) e.getPoint().getY();
}
});
parent.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
int newX = parent.getLocation().x + e.getX() - mouseX;
int newY = parent.getLocation().y + e.getY() - mouseY;
if (getLocation().x > newX)
newX = getLocation().x;
if (getLocation().y > newY)
newY = getLocation().y;
if (parent.getLocation().x + parent.getWidth() > width)
System.out.println("move outside right");
// newX = width - parent.getWidth(); // don't work
// newX = getLocation().x; // don't work
if (parent.getLocation().y + parent.getHeight() > heigth)
System.out.println("move outside bottom");
parent.setLocation(newX, newY);
}
});
}
mouseX и mouseY - целочисленные переменные класса, которые больше нигде не используются.
width и heigth - целочисленные переменные класса; значения ширины и высоты экрана, определяются при инициализации класса:
width = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
heigth = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();