2015-02-13 3 views
0

Итак, я создал JDialog, и я запрограммировал его, чтобы переместить его, перетащив его , установив это в начале программы; Точка point = new Point();Ограничить движение мыши при перетаскивании

int xMouse; 
int yMouse; 

int x; 
int y; 
Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize(); 
Rectangle winSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); 
int taskBarHeight = (scrnSize.height) - (winSize.height); 

int width = (scrnSize.width) - 300; 
int height = (scrnSize.height) - 153 - taskBarHeight; 

а затем внедрение этого;

private void BarMousePressed(java.awt.event.MouseEvent evt) {       
    point.x=evt.getX(); 
    point.y = evt.getY(); 
}         

private void BarMouseDragged(java.awt.event.MouseEvent evt) {         
    Point p = getLocation(); 
    x = p.x+evt.getX()-point.x; 
    y = p.y+evt.getY()-point.y; 
    if (x > width){} 
    else if (y > height){} 
    else if (x<(0)){} 
    else if (y<(0)){} 
    else 
    { 
    setLocation(x, y); 
    } 
} 

Как вы можете видеть, я попытался сделать так, чтобы при попытке вытащить коробку с экрана она терпит неудачу. Но это действительно очень плохо, иногда останавливается, пока экран не заканчивается и действительно мешает движению вблизи края экрана. Не говоря уже о том, что, хотя диалог перестает двигаться, мышь продолжает двигаться.

Так что мне было интересно, существует ли какой-либо способ создать какой-то пансион, который мышь должна работать внутри, когда он пытается перетащить диалог.

ответ

0

Что вы можете сделать, чтобы ограничить местоположение вашего JDialog, это добавить к нему ComponentListener и проверить его границы при его перемещении. Если вы видите, что она находится за пределами области, которую вы хотите, вы устанавливаете ее местоположение в какую-то другую точку.

package main; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JDialog; 

public class DialogListener { 

    public static void main(String[] args) throws AWTException { 
     final JDialog dialog = new JDialog(); 
     dialog.setSize(300, 400); 
     dialog.setVisible(true); 

     Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize(); 
     Rectangle winSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); 

     final Rectangle screen = new Rectangle(scrnSize.width, 2*scrnSize.height - winSize.height); 

     dialog.addComponentListener(new ComponentAdapter() {    
      @Override 
      public void componentMoved(ComponentEvent e) { 
       if (!screen.contains(dialog.getBounds())) 
        dialog.setLocation(300, 400); 
      } 
     }); 
    } 
} 

В этом примере местоположение устанавливается в фиксированную точку, чтобы показать, как работает этот метод. В реальной программе вы должны переместить диалог в ближайшую точку внутри экрана. Кроме того, если вы хотите, чтобы мышь была «заблокирована», вы можете взглянуть на класс Robot, чтобы программно программировать мышью.

Смежные вопросы