Я играю с графикой Java Swing и т. Д. Я пытаюсь создать форму регистрации / входа.
Я установил Undecorated (true) и создал свой собственный верхний бар. Когда вы тащите эту панель, я хочу, чтобы весь кадр двигался. И я также хочу, чтобы мышь оставалась в том же положении на кадре.
С этим кодом:
Рамка движется. Но мышь перемещается в верхний правый угол, кадры начальных координат X и Y.
JFrame frame = (JFrame) SwingUtilities.windowForComponent(this);
int mouseX = MouseInfo.getPointerInfo().getLocation().x; // Mouse X Coordinate
int mouseY = MouseInfo.getPointerInfo().getLocation().y; // Mouse Y Coordinate
int diffX = mouseX - frame.getX(); // The distance from JFrame X Coordinate to Mouse X Coordinate.
int diffY = mouseY - frame.getY(); // The distance from JFrame Y Coordinate to Mouse Y Coordinate.
if (diffY < 45) { // Y Coordinate 0 - 45 is the height of the top part of the window. Where you can move the frame.
frame.setLocation(mouseX, mouseY);
}
Насколько мне известно, приведенный ниже код должен заставить мышь оставаться на своем месте перед перетаскиванием.
JFrame frame = (JFrame) SwingUtilities.windowForComponent(this);
int mouseX = MouseInfo.getPointerInfo().getLocation().x; // Mouse X Coordinate
int mouseY = MouseInfo.getPointerInfo().getLocation().y; // Mouse Y Coordinate
int diffX = mouseX - frame.getX(); // The distance from JFrame X Coordinate to Mouse X Coordinate.
int diffY = mouseY - frame.getY(); // The distance from JFrame Y Coordinate to Mouse Y Coordinate.
if (diffY > 0 && diffY < 45) { // Y Coordinate 0 - 45 is the height of the top part of the window. Where you can move the frame.
int x = mouseX - diffX;
int y = mouseY - diffY;
frame.setLocation(x, y);
}
Но вместо этого .. ничего не происходит. Функция вызывается, но кадр не движется. Что я делаю неправильно? Я не могу найти проблему.
EDIT *
Я создал класс ComponentMover и создал его экземпляр следующим образом:
DragListener drag = new DragListener();
JFrame frame = (JFrame) SwingUtilities.windowForComponent(this);
int mouseX = MouseInfo.getPointerInfo().getLocation().x; // Mouse X Coordinate
int mouseY = MouseInfo.getPointerInfo().getLocation().y; // Mouse Y Coordinate
int diffX = mouseX - frame.getX(); // The distance from JFrame X Coordinate to Mouse X Coordinate.
int diffY = mouseY - frame.getY(); // The distance from JFrame Y Coordinate to Mouse Y Coordinate.
if (diffY > 0 && diffY < 45) { // Y Coordinate 0 - 45 is the height of the top part of the window. Where you can move the frame.
frame.addMouseListener( drag );
frame.addMouseMotionListener( drag );
}
ComponentMover cm = new ComponentMover(this, frame);
Но проблема сохраняется.
Заранее спасибо за помощь!
РЕДАКТИРОВАТЬ 2 *
Это подход, который я выбрал, чтобы заставить работать ComponentMover. Хотя я не уверен, что он может делать то, что я хочу.
ЭТО КОДЕКС
public class CompMoverTest extends JFrame{
public CompMoverTest(){
MainPanel mp = new MainPanel();
setLayout(new FlowLayout());
setUndecorated(true);
add(mp);
setSize(500,500);
setVisible(true);
setLocationRelativeTo(null);
}
public static void main(String[] args) {
new CompMoverTest();
}
}
class MainPanel extends JPanel{
public MainPanel(){
JFrame frame = (JFrame) SwingUtilities.windowForComponent(this);
setPreferredSize(new Dimension(300,300));
setBackground(Color.yellow);
ComponentMover cm = new ComponentMover(frame, this);
}
}
ЭТО РЕЗУЛЬТАТ
ЭТО ЧТО Я ХОЧУ
Надеюсь, это достаточно ясно. Теперь у меня есть желтая панель, которая перемещается, когда я ее перетаскиваю. Я понимаю, что это функция класса ComponentMover.
Однако я хочу, чтобы при перетаскивании желтой панели весь кадр перемещался по экрану, как второй рисунок. Это возможно с классом ComponentMover или нет? Я не могу заставить это работать. Остальное в порядке.