Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/23: Рейтинг темы: голосов - 23, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7

Как обработать наезд мышки на кнопку?

24.03.2007, 20:31. Показов 4662. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В Вижуал J++ 6.0 Как можно обработать событие прохождение мышки над кнопкой ? Подскажите пожайлуста, специалисты !!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2007, 20:31
Ответы с готовыми решениями:

Как у панель обработать кнопку выхода(крестик)
мне нужно узнать когда нажимается эта кнопка,как это сделать?

Всплывающие подсказки при наведении мышки на кнопку
Как сделать чтобы при наводе мышки на кнопку всплывала подсказка?

Как обработать правый клик мышки
Доброго времени суток всем. Уважаемые знатоки подскажите как обработать правый клик мышки по ComboBox. ComboBox прямой обработки не...

19
quit
31.03.2007, 20:14
Я вобщем то не специалист но думаю что надо переопределить метод handleEvent()
т.к. методы action() mouseMove() ,без переопределения обрабатывают для кнопок только стандортные события типа click
mishgun
02.04.2007, 18:34
Вот эти два метода будут обрабатывать 'наезд' и
'съезд' мыши с кнопки
Java
1
2
3
4
5
6
7
    public void mouseEntered(MouseEvent e) {
       saySomething('Mouse entered', e);
    }
 
    public void mouseExited(MouseEvent e) {
       saySomething('Mouse exited', e);
    }
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
04.04.2007, 12:58
Это в 1.0 которым давно никто не пользуется а в 1.1 - на котором J++ 6 и работает это делается так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.awt.*;
import java.awt.event.*;
 
public class MouseMoveTest extends Frame {
    
Button button;
    
 public static void main(String args[]){
    new MouseMoveTest();
 }
    
 public MouseMoveTest(){
    super('Test');
    
    setLayout(new BorderLayout());
    setBackground(Color.lightGray);
                        
    button = new Button('Get mouse over me');
    button.addMouseListener(new MouseAdapter()
        
    public void mouseEntered(MouseEvent e){
    System.out.println('Mouse entered');
    }
    public void mouseExited(MouseEvent e){
    System.out.println('Mouse exited');
    }
    });
    add(BorderLayout.NORTH ,button);
        
    setSize(300, 300);
    setVisible(true);
  }
}
0
mishgun
04.04.2007, 18:00
Дело в том что эти методы принадлежат интерфейсу MouseListener и я не собирался писать за кого-то программу.И кстати это некорректно говорить что это было в 1.0 я работаю на J++ 6.0 и JDK 1.2.2 и они естественно ещё там и никто их не отменял , тем более что Вы использовали те же методы которые написал я.И потом необходимо наисать ещё один класс который будет extends MouseAdapter где и определить эти два метода потому что программа не будет работать в том виде как вы написали.
Это должно выглядеть так.
Java
1
2
3
4
5
6
7
8
{
 Button b = new Button();
 b.addMouseListener(new MouseHandler());
}
 public class MouseHandler extends MouseAdapter
{
 // определяете здесь методы которые вам нужны
}
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
04.04.2007, 18:56
Пардон перепутал с public Компонентовским mouseEnter и mouseExit другое дело что вы не объяснили человеку как их использовать.

Насчёт того что пример программы работать не будет - даже не откомпилируется я тоже согласен - но по другой причине - поскольку у при переносе программы в HTML у меня потерялась фигурная скобка после строчки:
button.addMouseListener(new MouseAdapter()

должно быть так:

Java
1
2
3
4
5
6
7
8
9
button.addMouseListener(new MouseAdapter(){
 
public void mouseEntered(MouseEvent e){
System.out.println('Mouse entered');
}
public void mouseExited(MouseEvent e){
System.out.println('Mouse exited');
}
});
Называется анонимным классом ...
0
mishgun
05.04.2007, 18:06
Вот с такой постановкой я согласен.Так что там два пути мой или ваш.Так что как ковориться на выбор.
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
13.04.2007, 16:43  [ТС]
Уважаемые программисты.
Я должен пояснить подробнее суть задачи.
Мне необходимо обработать в основном апплете два различных типа событий для кнопки.
1 - наезд мыши.
2 - нажатие.
Поймите В АППЛЕТЕ. А не в классе кнопки.
А если идти Вашими методами, то в итоге в апплете я получаю возможность обработать только единственное событие от кнопки (либо нажатие либо наезд). Если Вы знаете, помогите как различать из апплета вид события от мыши.
Заранее благодарен. Фима.
0
mishgun
14.04.2007, 21:15
Какой конкретно метод Вы используете чтобы обработать нажатие?MouseClicked, MousePressed или
actionPerformed(Который отвечает за все события происходящие в частности с кнопкой)?И потом вы спрашивали как обработать наезд мыши на кнопку и разговора про нажатие не было..
mishgun
14.04.2007, 21:50
Я тут добавил код к коду моего коллеги.В данном случае он будет работать так как вам надо и при наезде и при съезде и при нажатии на кнопку он будет печатать в консоль и закрывать программу
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.awt.*;
import java.awt.event.*;
 
public class TestMouse extends Frame {
 
Button button;
 
public static void main(String args[]){
new TestMouse();
}
 
public TestMouse(){
super('Test');
 
setLayout(new BorderLayout());
setBackground(Color.lightGray);
 
button = new Button('Get mouse over me');
button.addActionListener(new ButtonHandler());
button.addMouseListener(new MouseAdapter(){
 
public void mouseEntered(MouseEvent e){
System.out.println('Mouse entered');
}
public void mouseExited(MouseEvent e){
System.out.println('Mouse exited');
}
});
add(BorderLayout.NORTH ,button);
 
setSize(300, 300);
setVisible(true);
}
public class ButtonHandler implements ActionListener{
 String s;
  public void actionPerformed(ActionEvent e){
   s=e.getActionCommand();
   if(s.equals('Get mouse over me'))
   {
    System.out.println('Button was clicked');
    System.exit(0);
   }
  }
}
}
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
14.04.2007, 22:25  [ТС]
Извиняюсь. Я новичок, поэтому не корректно поставил вопрос.
Я пошёл по такому пути. В классе MyButton обрабатываю события для мыши :
Java
1
2
3
4
5
6
7
8
9
10
11
this.addMouseListener
    (
    new MouseAdapter()
    {
public void mouseEntered(MouseEvent event) 
        {setLabel(lbl); }
public void mouseExited(MouseEvent event) 
        { setLabel('');     }
public void mouseClicked(MouseEvent event)
        {setBackground(color);}
    });
Вроде бы всё хорошо. Теперь в Классе Апплет пытаюсь обработать события (У меня массив кнопок):
Java
1
2
3
4
5
6
7
8
9
10
11
public boolean action (Event evt, Object obj)
    {
    for(int i=0; i<6; i++)
    for(int j=0; j<6; j++)
    if(evt.target == Fld[i][j] )
      {
      Fld[i][j].setBackground (Me); 
        return true;
          }
          retyrn false;
    }
Однако теперь, реагирую на событие 'Наезд' я не могу заставить апплет отличать его от события 'Нажатие'. Если можете, помогите мне пожайлуста. Огромное Вам спасибо.
0
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
15.04.2007, 00:34  [ТС]
Увы Ваш пример не добавил ничего нового. Сообщения в консоль снова печатаются непосредственно в обработчике, находящемся в классе кнопки. А мне необходимо различать и обрабатывать события , происходящие с кнопкой и мышью из Апплета, причём, как я уже отмечал выше, у меня несколько кнопок.
К примеру, при наезде на некоторую кнопку, я должен в Апплете просчитать какие-то величины и выдать результат на кнопку, как лейбл. А при нажатии на эту кнопку, выдать другой результат.
Ваш пример, увы, не позволяет мне это проделать, так как обработка событий у Вас происходит внутри класса Кнопки. Я, наверное уже достал? Да?
0
mishgun
15.04.2007, 18:08
попробуйте заменить MouseClicked на actionRerformed(как у меня) потому что интерфейс ActionListener отвечает за все события происшедшие в нашем случае при нажатии на кнопку. И совет - начинайте использовать ActionListener для обработки кнопки вместо event(Evevnt e,Object o) потому что это немного устарело и если Вы будете компилировать Ваш код в JDK1.2.2 вместо J++ вы получите сообщение что event deprecated.
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
28.04.2007, 15:46
1) Пожалуйста уточните что за класс такой MyButton - он что extends Button ?
2) Определяете ли вы MouseListener и ActionListener для каждой кнопки ?
3) Я очень не советую вам использовать Event model 1.0 вместе с 1.1 - результаты могут быть неопределёными..
0
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
30.04.2007, 19:59  [ТС]
1)Да. Я наследовал класс Button. Но это не принципиально. Я мог бы обойтись любым другим элементом. Например Canvas. Важно для меня научиться передавать и различать события происходящие с объектом этого моего класса, в базовом классе, к примеру Applet, в котором основная программа и написана.
2)Последнее, что я пробывал, увы безуспешно:
в моём классе кнопки Field() переопределял:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void processMouseEvent(MouseEvent e){
Graphics g;
switch(e.getID())
{
case MouseEvent.MOUSE_PRESSED :
Pressed = true; repaint();  break;
case MouseEvent.MOUSE_RELEASED :
if(ActList != null)
{ActList.actionPerformed ( new ActionEvent   (this,ActionEvent.ACTION_PERFORMED,Str));}
if(Pressed == true)
{Pressed = false;repaint();}break;
case MouseEvent.MOUSE_ENTERED :
if(ActList != null){
ActList.actionPerformed ( new ActionEvent (this,ActionEvent.ACTION_PERFORMED,Str));}break;if
case MouseEvent.MOUSE_EXITEDbreak;  
}
super.processMouseEvent (e);    
}
//************************************************
public void addActionListener(ActionListener List){ActList = AWTEventMulticaster.add (ActList, List);   
enableEvents(AWTEvent.MOUSE_EVENT_MASK );}
//*******************************************
public void removeActionListener(ActionListener List){
ActList = AWTEventMulticaster.remove  (ActList, List);}
3) Далее в Init() класса Applet определяю массив
Своих кнопок. И включаю для каждой слушатель:
Java
1
2
3
4
5
6
for(int i=0; i<6; i++)
for(int j=0; j<6; j++)
{Fld[i][j] = new Field(' * ');
 this.add (Fld[i][j]);
 Fld[i][j].addActionListener (this);
}
Далее пытаюсь обработать события от какой-то из этих кнопок:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public void actionPerformed(ActionEvent e)
{
for(int i=0; i<6; i++)
   for(int j=0; j<6; j++)
{
if(e.getSource () == Fld[i][j])
{ switch(e.getID ())
  {case MouseEvent.MOUSE_PRESSED :  
Fld[i][j].setBackground (Color.black ); break;
   case MouseEvent.MOUSE_ENTERED :  
Fld[i][j].setBackground (Color.gray  ); break;
}
}
Но ничего не получается. Обрабатывается как ни в чём ни бывало только нажатие. А наезд - игнорируется.
else Fld[i][j].setBackground (Color.white ); Fld[i][j].repaint ();
}
}
0
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
30.04.2007, 20:50
Вот попробовал нечто подобное - всё работает..

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.awt.*;
import java.awt.event.*;
 
public class Test4 extends Frame implements MouseListener{
        
    MM[][] mm;
    public static void main(String args[]){
        System.out.println('Started');
        new Test4();
    }
    
    public Test4(){
        
        setLayout(new GridLayout(6,6));
            
        mm = new MM[6][6];
        
        for (int i=0; i<6; i++)
            for (int j=0; j<6; j++){
                
                mm[i][j] = new MM('*');
                mm[i][j].addMouseListener(this);
                add(mm[i][j]);
            }
            
        
        setSize(300, 300);
        setBackground(Color.lightGray);
        setVisible(true);
        
    }
    
    public void mouseClicked( MouseEvent e ) {
        System.out.println('mouseClicked');
    }
    public void mouseEntered( MouseEvent e ){
        System.out.println('mouseEntered');
        ((MM) e.getSource()).setBackground (Color.gray );
    }
    public void mouseExited( MouseEvent e ) {
        System.out.println('mouseExited');
        ((MM) e.getSource()).setBackground (Color.lightGray);
    }
    public void mousePressed( MouseEvent e ) {
        System.out.println('mousePressed');
        ((MM) e.getSource()).setBackground (Color.black ); 
    }
    public void mouseReleased( MouseEvent e ) {
        System.out.println('mouseReleased');
        ((MM) e.getSource()).setBackground (Color.lightGray);
    }
    
    class MM extends Button {
            
        MM(String text){
            super(text);
        }
        
    }
}
0
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
02.05.2007, 02:16  [ТС]
Спасибо тебе огромное Влад.Это именно то что мне было нужно. Если тебе не затруднительно, мог бы ты ответить на другой вопрос? Он проще.
Я написал программу на основе класса Frame. И хотел задействовать в ней звуковые эффекты. Но в этом классе нет свойства PLAY(). Можно ли достичь как-нибудь желаемого?
0
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
02.05.2007, 12:22
Насколько я знаю такая возможность существует только начиная с JDK1.2 при помощи статического метода Applet.getAudio()
0
mishgun
04.05.2007, 20:29
Примерно это выглядит так.Если я правильно понял что Вы имели ввиду.Но это только часть кода и иметй ввиду что Java не поддерживает MP3 файлы(если Вы собираетесь использовать их).И послушайтесь моего совета.Скачайте API-documentation(http://java.sun.com) и многие вопросы у вас отпадут.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.applet.*;
 
 Applet appl = new Applet();
 try{
//место расположения  муз.файла
  URL url = new URL('url');
AudioClip ac = appl.getAudioClip(url);
  if(ac!=null)
  ac.play();
//или loop() если вам нужно непрерывное 
//проигрование файла.
  else{
  System.out.println('No music');
  }
 catch(MalformedURLException e){}
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
06.05.2007, 19:29  [ТС]
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2007, 19:29
Помогаю со студенческими работами здесь

Как переместить кнопку на форме перетаскиванием мышки
Как переместить кнопку на форме перетаскивание мышки Drag and Drop

Напишите код который бы при наведение мышки на кнопку перемещал эту кнопку
Такой вопрос. Напишите код который бы при наведение мышки на кнопку перемещал эту кнопку

Как обработать нажатие на кнопку?
В диалоговом окне я создала кнопку &quot;ОК&quot;. Нажав на нее должно закрыться диалоговое окно (так и происходит) и в главном окне должно что-то...

Как обработать кнопку на веб-странице?
Здравствуйте, такая проблема. есть на форму стандартный веб-браузер, когда в него загружается страница нужно нажать на этой странице кнопку...

Как сделать чтобы при на ведении мышки на кнопку, цвет другой кнопки изменялся?
Ребят как сделать чтобы при на ведении мышки на кнопку . цвет другой кнопки изменялся ? Спасибо !


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru