Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Jtable + MouseAdapter()


Автор: sveta 7.4.2008, 16:05
 Добрый день.
На  таблицу повешен MouseMotionListener. Почему при выходе из таблицы ячейка остается активной и не работает  mouseExited? Что мешает?
Код

public class test extends JFrame
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    /**
     * @param args
     */
    
    int col = -1;
    int row = -1;
    JTable tabelle;

    public static void main(String[] args) 
    {
        test t = new test();
        t.setSize(500,200);
        t.setLocation(300,300);
        t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        t.setVisible(true);

    }
    public test()
    {
          super("Table");
          tabelle = new JTable(3, 3);
          JScrollPane pane = new JScrollPane(tabelle);
          JPanel panel = new JPanel();
          tabelle.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JComboBox()));
       
          tabelle.addMouseMotionListener(new MouseAdapter()
          {
        
            @Override
            public void mouseMoved(MouseEvent e)
            {
                col = tabelle.columnAtPoint(e.getPoint());
                row = tabelle.rowAtPoint(e.getPoint());
                if(col == 1)
                tabelle.editCellAt(row, col);
                else
                    if(tabelle.getCellEditor() != null )
                        tabelle.getCellEditor().stopCellEditing();
            }
        
            @Override
            public void mouseExited(MouseEvent arg0) 
            {
                
                if(tabelle.getCellEditor() != null )
                    tabelle.getCellEditor().stopCellEditing();
            }
            
            });        
           panel.add(pane);
           setContentPane(panel);
        }


}



Автор: powerOn 8.4.2008, 00:22
Слушатель для MouseExited добавляется не через addMouseMotionListener, а через addMouseListener.

Код

tabelle.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseExited(MouseEvent arg0)
            {
                .....
            }
        });

Автор: sveta 8.4.2008, 10:02
Спасибо за помощь. Но в данном случае перестает нормально функционировать mouseMoved, невозможно кликнуть на ComboBox.
Код

pane.addMouseMotionListener(new MouseAdapter()
 {
    @Override
    public void mouseMoved(MouseEvent arg0) 
               {
         if(tabelle.getCellEditor() != null )
        tabelle.getCellEditor().stopCellEditing();

                }
}                


Автор: math64 8.4.2008, 10:12
Код

MouseAdapter ma = new MouseAdapter() {
  public void mouseMoved(MouseEvent e) {
    ...
  }
  public void mouseExited(MouseEvent e) {
    ...
  }
};
tabelle.addMouseListener(ma);
tabelle.addMouseMotionListener(ma);

Автор: sveta 8.4.2008, 10:24
В предыдущем сообщении я написала свое решение. Но хотелось бы найти решение, исходя из листенера, повешенного на таблицу.

Автор: sveta 8.4.2008, 11:06
Всем спасибо.
Решение найдено:
Код


int col = -1;
    int row = -1;
    JTable tabelle;

    public static void main(String[] args) 
    {
        test t = new test();
        t.setSize(500,200);
        t.setLocation(300,300);
        t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        t.setVisible(true);

    }
    public test()
    {
          super("Table");
          tabelle = new JTable(3, 3);
          JScrollPane pane = new JScrollPane(tabelle);
          JPanel panel = new JPanel();
          JComboBox cb =new JComboBox();
         
          tabelle.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(cb));
       
         
          tabelle.addMouseMotionListener(new MouseAdapter()
          {
        
            @Override
            public void mouseMoved(MouseEvent e)
            {
                col = tabelle.columnAtPoint(e.getPoint());
                row = tabelle.rowAtPoint(e.getPoint());
                if(col == 1)
                tabelle.editCellAt(row, col);
                else
                    if(tabelle.getCellEditor() != null )
                        tabelle.getCellEditor().stopCellEditing();
            }
        
            
            
            });
          cb.addMouseListener(new MouseAdapter() {
            
                @Override
                public void mouseExited(MouseEvent arg0) {
                    if(tabelle.getCellEditor() != null )
                    {
                        SwingUtilities.invokeLater(new Runnable() {
                        
                            public void run() 
                            {
                                tabelle.getCellEditor().stopCellEditing();
                        
                            }
                        
                        });
                    }
                    super.mouseExited(arg0);
                }
            
            });


           panel.add(pane);
           setContentPane(panel);
        }


}




Добавлено через 14 минут и 17 секунд
забыла пометить вопрос, как решенный.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)