JList MouseMoved и MousePressed - PullRequest
       18

JList MouseMoved и MousePressed

3 голосов
/ 04 декабря 2011

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

public class JListTT extends javax.swing.JList {
    public JListTT() {
        super();
       addMouseListener(new ttListener());
...
   class ttListener extends MouseAdapter {
        public void mouseMoved(MouseEvent e) {
             String nodeID = bldItemNodeID();
             theList.setToolTipText(nodeID);
            }
        public void mousePressed(MouseEvent ev)  {check(ev); }
        public void mouseReleased(MouseEvent ev) {check(ev); }
        public void mouseClicked(MouseEvent ev)  {check(ev); }
        public void check(MouseEvent ev) {
            if (ev.isPopupTrigger()) { 
                theList.setSelectedIndex(theList.locationToIndex(ev.getPoint())); 
                menu.show(theList, ev.getX(), ev.getY()); 
            }
        }
    }

Ответы [ 4 ]

4 голосов
/ 04 декабря 2011

Вы добавляете объект ttListener как MouseListener, но я не вижу, чтобы вы добавляли объект ttListener как MouseMotionListener.Например:

ttListener myMouseadapter = new ttListener();
addMouseListener(myMouseadapter);
addMouseMotionListener(myMouseadapter);
2 голосов
/ 04 декабря 2011

Я не проверял это сам, но, глядя на javadoc JList, функция подсказки доступна из коробки.В javadoc JList # getTooltipText четко указано

Переопределяет метод getToolTipText JComponent, чтобы разрешить использование подсказок средства визуализации, если для него задан текст.

Таким образом, если ваш ListCellRenderer возвращает Component в методе getListCellRendererComponent, который имеет подсказку , он будет отображаться JList без необходимости прослушивания.

1 голос
/ 04 декабря 2011

необязательно нужен низкоуровневый подход, так как пользовательский mouse- / motionListener:

  • в отношении всплывающей подсказки для каждой ячейки, см. Ответ @ Robin
  • Что касается контекстного меню, у JComonent есть свойство componentPopupMenu: использование которого позволит автоматически открыть меню на сочетаниях клавиш

«не обязательно», потому что вы, кажется, полагаетесь на ячейку, выбранную правой кнопкой мыши. Если это так, вам все равно понадобится MouseListener для запуска выбора (после десятилетних дебатов Swing этого не делает - что, по-видимому, необычно в текущих нативных приложениях ;-)

0 голосов
/ 06 мая 2016

Вы можете достичь этого, используя mouseDragged

YourClass extends JPanel implements MouseListener{
    ......

    @Override
    public void mouseDragged(MouseEvent e) {
        //code go here

    }
}
...