Вот несколько проще пример обычая DesktopManager
, чтобы сохранить внутреннюю рамку в пределах рабочего стола:
public class BoundsDesktopManager extends DefaultDesktopManager
{
/*
** This is called anytime a frame is moved.
** This implementation keeps the frame from leaving the desktop.
*/
@Override
public void dragFrame(JComponent component, int x, int y)
{
// Deal only with internal frames
if (component instanceof JInternalFrame)
{
JInternalFrame frame = (JInternalFrame)component;
JDesktopPane desktop = frame.getDesktopPane();
Dimension d = desktop.getSize();
// Too far left or right?
if (x < 0)
{
x = 0;
}
else if (x + frame.getWidth() > d.width)
{
x = d.width - frame.getWidth();
}
// Too high or low?
if (y < 0)
{
y = 0;
}
else if (y + frame.getHeight() > d.height)
{
y = d.height - frame.getHeight();
}
}
// Pass along the (possibly cropped) values to the normal drag handler.
super.dragFrame(component, x, y);
}
}
Вопросы, ищущих отладки помощи («почему не этот код работает?») Должен включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать [mcve]. – NightShadeQueen
Вы использовали правильный код? «Принятый» ответ был лишь доказательством концепции. Реальное решение было предоставлено человеком, который задал вопрос. – camickr