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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MouseEvent на компоненте, Прослушивание MouseEvent на компонентах 
:(
    Опции темы
Dancer
Дата 18.5.2005, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



Привет всем! Сразу хочу извинится, может быть вопрос глупый, но с AWT и Applet не работал, и скажу честно знаком поверхностно. Проблема в следующем:
Создаю сой компонент TitleComponent наделяю его свойствами и отрисовываю его объекте Window. Хочу что делать что-то когда мышь входит в область TitleComponent. Даже если мышь не находится в области TileComponent эвенты от мыши приходят в TitleComponent, а как этого избежать или отфильтровать?
Хотя я может быть что-то не догоняю, помогите советом или кто чем сможет smile. Использовать Frame нельзя.

Класс txtWindow :
Код


import java.awt.*;

public class txtWindow extends Window {
    TitleComponent titleComp;

    public txtWindow(){
        super((Window) new Frame(""));
        setSize(300, 300);
        setLocation(0x50, 0x50);
        setBackground(new Color(0xff,0xcc, 0x00));
        titleComp = new TitleComponent("TTTT", this.getWidth(), 15);
        add(titleComp);
        setVisible(true);
    }


public static void main(String args[])  {
    final txtWindow window = new txtWindow();
     window.show();
}
}



Класс TitleComponent:
Код


import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;

public class TitleComponent extends Component {
    String title;
    Color titleColor = new Color(0x00, 0x00, 0xcc);
    int width, height;

    TitleComponent (String title) {
        this(title, 0, 0);
    }

    TitleComponent (String title, int w, int h) {
        this.title = title;
        width = w;
        height = h;

        addMouseListener(new MouseListener() {
            public void mouseClicked(MouseEvent e) {
                //To change body of implemented methods use File | Settings | File Templates.
            }

            public void mouseEntered(MouseEvent e) {
System.out.println("Mouse enter in TitleComponent");
                //To change body of implemented methods use File | Settings | File Templates.
            }

            public void mouseExited(MouseEvent e) {
System.out.println("Mouse exit from TitleComponent");
                //To change body of implemented methods use File | Settings | File Templates.
            }

            public void mousePressed(MouseEvent e) {
System.out.println("Mouse pressed in TitleComponent");
                //To change body of implemented methods use File | Settings | File Templates.
            }

            public void mouseReleased(MouseEvent e) {
System.out.println("Mouse released in TitleComponent");
                //To change body of implemented methods use File | Settings | File Templates.
            }
        });
        addMouseMotionListener(new MouseMotionListener(){
            public void mouseDragged(MouseEvent e) {
                //To change body of implemented methods use File | Settings | File Templates.
            }

            public void mouseMoved(MouseEvent e) {
System.out.println("Mouse moved in TitleComponent");
                //To change body of implemented methods use File | Settings | File Templates.
            }
        });
    }

    public void paint(Graphics g) {
        g.setColor(titleColor);
        g.fillRect(0,0,width, height);
        g.setColor(Color.WHITE);
        g.setFont(new Font("SanSerif", Font.BOLD, height - 4));
        g.drawString(title, 3, height-2);
    }
}




--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
604
Дата 18.5.2005, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хе хе smile Сам чуть не запарился! А все просто, дело в том что твой TitleComponent растягивается по всему Window. Потому как у Window по умолчанию BorderLayout.
ps. А причем тут апплет?

Это сообщение отредактировал(а) 604 - 18.5.2005, 13:16
PM MAIL   Вверх
Dancer
Дата 18.5.2005, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



Applet не причём, просто говорю же, нету опыта работы с MouseEvent и Listenerами, в апплетах это хоть отчасти используется. Слушай, а не подскажешь, как мне от этого избавиться? WindowObject.setLayout(null) поможет?
Не подскажешь, что сделать чтобы этого избежать? у меня на этот Window будет ещё добавляться свои компоненты в дальнейшем



--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
604
Дата 18.5.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я бы сделал так:
В конструкторе txtWindow добавлять твой компонент так: add(titleComp, BorderLayout.NORTH);
Класс TutleComponent Наследовал бы от Label (Зафига нам делать то что уже сделано?) и естественно добавил бы в конструктор TitleComponent(String title, int w, int h) строку this.setSize(w, h); window.show(); - делать не надо.
Лучше вот пример:
Код

import java.awt.*;
import java.awt.event.*;

public class txtWindow extends Window
{
  private Label title = new Label();
  public txtWindow()
  {
    super(new Frame());
    setSize(300, 300);
    setLocation(20, 20);
    setBackground(Color.RED);
    
    title.addMouseMotionListener(new MouseMotionAdapter()
    {
      public void mouseMoved(MouseEvent e)
      {
        System.out.println("Mouse moved in title");
      }
    });
    title.setBackground(Color.GREEN);
    title.setSize(getWidth(), 15);

    add(title, BorderLayout.NORTH);
    setVisible(true);
  }

  public static void main(String args[])
  {
    final txtWindow window = new txtWindow();

  }
}


Это сообщение отредактировал(а) 604 - 18.5.2005, 14:09
PM MAIL   Вверх
batigoal
Дата 18.5.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Dancer
Сразу прикинь примерное расположение всех твоих компонентов, тогда можно будеть выбрать подходящий layout.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Dancer
Дата 18.5.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



А если всё-таки не Label использовать а мой TitleComponent что мне в нём нужно поменять, чтобы заработало. Так как далее на этот компонент я хочу добавить кнопки, будет как обычный Title в окошках. Я конечно понимаю, что мол Frame есть, но мне нужно именно так как делаю.
Нужно сделать программульку, которая показывает содержимое файлика в окне произвольного размера. Текст должен быть отформатирован особым образом, и показываться любым пропорциональным шрифтом, пары слов должны чередоваться по размеру. (9 12 9 12 например)
Нужно, чтобы при простой перерисовке текст не переформатировался (но это я хочу организовать как Image и просто помтом его использовать)
Есть такое условие, программа должна быть написана на Java без использования компонент JTextPanel, а так же других компонент библиотек Swing и AWT, выполняющих форматирование (я так понял как форматирование текста, так и вообще окон), то есть нужно организовывать собственные компоненты.
Хочу организовать своё окно, в котором будет мой TitleComponent с кнопкой (Close для начала)
Текстовый компонет, и бордер для окна. При попадание в угол бордера можем делать ресайз окна, при попадании в текстовый компонент будем выдавать PopUp меню для смены шрифта, выбора файла и размеров выводимых шрифтов.


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
604
Дата 18.5.2005, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Dancer
Так а чем Label не нравится? На него тоже можно кнопки налепить без проблем! Между прочим в MetalL&F в качестве TitleBar как раз Label используется. Тем более придется написать чтото типа Lable , поэтому я не вижу смысла отказыватся от этого компонента в пользу своего... который не так то и просто кочественно реализовать. Или это часть Задания? Насчет Border(а) который будет ресайзить Window, задача далеко не тривиальная. Я как то пробовал делать нечто подобное... пытался сам реализовать все декорации окна. С резайзом право, вниз, правоНиз все было нормально а вот наоборот получалось сплошное дерганье smile могу показать свои наработки в этой области возможно они тебе помогут. Подозреваю что все что тебе нужно можно подсмотреть в MetalLookAndFeel или какой либо другой.
PM MAIL   Вверх
Dancer
Дата 19.5.2005, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



604

Пришли, если не трудно и не жалко smile. Заранее благодарен.

Андрюха aka Dancer


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

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

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


 




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


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

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