Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Jtable + MouseAdapter() 
V
    Опции темы
sveta
Дата 7.4.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.9.2006

Репутация: нет
Всего: нет



 Добрый день.
На  таблицу повешен 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);
        }


}



PM MAIL   Вверх
powerOn
Дата 8.4.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Слушатель для MouseExited добавляется не через addMouseMotionListener, а через addMouseListener.

Код

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



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
sveta
Дата 8.4.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.9.2006

Репутация: нет
Всего: нет



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

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

                }
}                


PM MAIL   Вверх
math64
Дата 8.4.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 5
Всего: 72



Код

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

PM   Вверх
sveta
Дата 8.4.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.9.2006

Репутация: нет
Всего: нет



В предыдущем сообщении я написала свое решение. Но хотелось бы найти решение, исходя из листенера, повешенного на таблицу.
PM MAIL   Вверх
sveta
Дата 8.4.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.9.2006

Репутация: нет
Всего: нет



Всем спасибо.
Решение найдено:
Код


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 секунд
забыла пометить вопрос, как решенный.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.