2015-08-29 2 views
0

Я хочу заблокировать перетаскивание jInternalForm внутри панели рабочего стола. Я пробовал следующие шаги: Preventing JInternalFrame from being moved out of a JDesktopPaneКак остановить событие перетаскивания внутри jDesktopPane

Но это не сработало для меня. Может ли кто-то предложить для этого рабочий метод переопределения.

+0

Вопросы, ищущих отладки помощи («почему не этот код работает?») Должен включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать [mcve]. – NightShadeQueen

+0

Вы использовали правильный код? «Принятый» ответ был лишь доказательством концепции. Реальное решение было предоставлено человеком, который задал вопрос. – camickr

ответ

0

Вот несколько проще пример обычая 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); 
    } 
} 
Смежные вопросы