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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Свойства линий, как просмотреть свойства линии 
:(
    Опции темы
gromikiss
Дата 14.7.2005, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



По перемещению мыши чертитяся линии (пример знаком я думаю). как написать прогу, что бы можно было щелкнуть на начерченой линии и посмотреть ее свойства, скажем начало линии или конец? smile

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.Line2D;
import java.io.*;

class SimpleWhiteboard extends JPanel{
public JButton saveButton;
public int lastX=0, lastY=0;

public SimpleWhiteboard(){

setPreferredSize(new Dimension(530,180));
setBorder(BorderFactory.createLineBorder(Color.yellow,3));

saveButton=new JButton("Ïðîáà");
JTextArea res = new JTextArea(10,20);

setBackground(Color.RED);

setFont(new Font("Serif",Font.BOLD,18));

add(res,BorderLayout.CENTER);
add(saveButton,BorderLayout.SOUTH);

addMouseListener(new PositionRecorder());
addMouseMotionListener(new LineDrawer());

}


public void record(int x, int y){
lastX=x;
lastY=y;
}
private class PositionRecorder extends MouseAdapter{
public void mouseEntered(MouseEvent event){
requestFocus();
record(event.getX(),event.getY());
}
public void mousePressed(MouseEvent event) {
record(event.getX(),event.getY());
}
}



public class LineDrawer extends MouseMotionAdapter{
Line2D line;
public void mouseDragged(MouseEvent event){
int x=event.getX();
int y=event.getY();
Graphics g= getGraphics();
System.out.println(g.hashCode());
//Line line;
Graphics2D k= (Graphics2D)g;


g.setColor(Color.green);
g.drawLine(lastX, lastY, x, y);
System.out.println(g.hashCode());
record(x,y);
System.out.println("X="+lastX);
//Graphics k= getGraphics();
System.out.println(k.hashCode());
}
}
}
PM MAIL   Вверх
batigoal
Дата 14.7.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Гм... Программа несколько кривая...

Цитата(gromikiss @ 14.7.2005, 15:42)
как написать прогу, что бы можно было щелкнуть на начерченой линии и посмотреть ее свойства, скажем начало линии или конец?

Идея должна быть такова: нужно не просто рисовать линии на экране, но и сохранять их в какой-нибудь массив. Далее, при клике мышкой перебирать этот массив, и смотреть - есть у нас точка клика в массиве, или нет. Если есть - выводим информацию по линии, если нет - рисуем новую линию.


P.S. Пользуйся кнопкой "Код", когда вставляешь листинг исходника.


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


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

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



Lamer George несовсем так, ибо трудно попась по тонкой линии при большом разрешении,
а когда их будет много..

потребуется вычислять область (зону) клика в которой могут находится линии
(пример - пересечение их)

щелкаешь по координатам X,Y и проверяешь по условию X1 > X < X2 & Y1 > Y < Y2

а затем предлагать выбор - какую линию хошь?




Это сообщение отредактировал(а) Metal_Heart - 14.7.2005, 15:35


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
batigoal
Дата 14.7.2005, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Metal_Heart
Замечание правильное, об этом я не подумал. Опыта нет. smile
Но это уже детали реализации.


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


Новичок



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

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



Спасибо за советы мужики. Получается, что нужно создать массив переменных, каждая новая линия это новая переменная. М-да не утешили вы меня. Я думал если линия нарисована значит контейнер знает об этом, и хранит ее свойства. Насколько я знаю каждый объект при создании имеет уникальный код который можно посмотреть с помощью HashCode() или я ошибаюсь? smile
PM MAIL   Вверх
batigoal
Дата 14.7.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



О хеш-коде тут недавно подробно говорили (http://forum.vingrad.ru/index.php?showtopic=51895), но дело в том, что ты не создаешь никаких объектов, когда делашь drawLine().

Это сообщение отредактировал(а) Lamer George - 14.7.2005, 16:04


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


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

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



gromikiss кстати, есть ещё одно простое решение - проверяешь цвет под кликом и если попадешь...


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
batigoal
Дата 14.7.2005, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Metal_Heart @ 14.7.2005, 17:27)
есть ещё одно простое решение - проверяешь цвет под кликом и если попадешь...


В общем-то, нехороший вариант. Цвет поменяешь - и все. Не делается так.

Отдает студенческими лабами... smile (без обид)


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


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

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



а я бес претензий на гениальность smile


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
gromikiss
Дата 14.7.2005, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Короче мужики я так понял лучше создать объект Line2D со всеми свойствами и его уже прочерчивать smile ? Но как лучше организовать именование обьектов, случайным числом. ведь будут и линии и овалы и квадраты и круги smile
PM MAIL   Вверх
batigoal
Дата 14.7.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



А зачем его именовать?

Имхо, можно делать таким порядком: делаешь (или берешь готовый) класс Line, при необходимости наследуешь от него частные случаи линии. В нем делаешь ArrayList (или другую коллекцию), которая содержит все точки. При создании линии добавляешь ее в массив существующих линий.
Потом, когда будешь определять, входит ли точка в твою линию, пробежишься по списку линий, а в них - по списку точек.

Пара замечаний:
1. Алгоритм, конечно, неоптимальный.
2. Наверняка, в Java2D такие классы и средства уже есть, и велосипеда изобретать не нужно.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0544 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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