2016-12-18 7 views
0

У меня есть JPanel со многими JButton компонентами внутри. Есть ли способ получить событие панели мыши при нажатии кнопки? Еще одна точка зрения: как сделать кнопку прозрачной для события панели мыши? Мне нужно записать событие mousePressed().Как я могу разделить, был ли компонент перетащен или нажат?

EDIT

Контекст: Я перетащив содержание панели через JScrollPane (на самом деле работает), чтобы добиться этого мне нужно, чтобы захватить точку, где при нажатии мыши, так как панель и кнопки имеют MouseListener и MouseMotionListener, чтобы захватить точку и сделать другие вещи.

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

EDIT 2

Я просто понимаю, прочитав мою собственную проблему ..., что он не будет делать никакой разницы извлекая MouseListener к JButton. Когда нажимаете кнопку, если мышь по ней, то actionPerformed будет выполняться в любом случае ... Что я могу сделать?

EDIT 3 Редактированный заголовок вопроса, в соответствии с решением.

+0

Может быть возможным дубликат: http://stackoverflow.com/questions/16431455/addmouselistener-for-a-jpanel –

+1

Зачем вам это нужно? Что вы хотите достичь? –

+0

@ СергийМедвинский задает очень хорошую пару вопросов. См. Также [Что такое проблема XY?] (Http://meta.stackexchange.com/q/66377) –

ответ

1

Kipping в виду, что порядок выполнения событий в этом случае: mousePressed-> mouseDragged-> actionPerformed-> mouseReleased, я получаю это работает в данный момент, добавив булево:

@Override 
public void mousePressed(MouseEvent e) { 
     origin = new Point(e.getPoint()); 
} 
//each time the user stops dragging set dragged to false 
@Override 
public void mouseReleased(MouseEvent arg0) { 
    dragged = false; 
} 

@Override 
public void mouseDragged(MouseEvent e) { 

     dragged=true; 
     if(((Component) e.getSource()).getParent().equals(myPanel) 
       || e.getSource().equals(myPanel)){ 
      if (origin != null) { 
      JViewport viewPort = (JViewport) SwingUtilities.getAncestorOfClass(JViewport.class, myPanel); 
      if (viewPort != null) { 
       int deltaX = origin.x - e.getX(); 
       int deltaY = origin.y - e.getY(); 

       Rectangle view = viewPort.getViewRect(); 
       view.x += deltaX; 
       view.y += deltaY; 
       myPanel.scrollRectToVisible(view); 
      } 
     } 
} 
@Override 
public void actionPerformed(ActionEvent e){ 

    //stuff do detect the button... 
    //..in case there is more than one panel, if the component belong to myPanel and dragg is false 
    if(((Component) e.getSource()).getParent().equals(myPanel)&& dragged==false){ 
    //do stuff 
    } 
} 

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

  • Нет связанных вопросов^_^