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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JFreeChart перекрещивающиеся линии за мышкой 
:(
    Опции темы
FlakeMusic
Дата 2.10.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте.

Видел что можно сделать так, чтобы за мышкой бегали перекрещивающиеся пунктирные линии, которые параллельны осям и при это показывается значение.
PM MAIL   Вверх
dorogoyIV
Дата 2.10.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class LinesMouse extends JFrame
                        implements MouseMotionListener
{
 private static int WIDTH = 400;
 private static int HEIGHT = 300;
 Lines lines = new Lines(this);

 public LinesMouse()
 {
  getLayeredPane().addMouseMotionListener(this);
  lines.setBounds(0, 0, WIDTH, HEIGHT);
  getLayeredPane().add(lines);
 }

 public void mouseDragged(MouseEvent e){}
 public void mouseMoved(MouseEvent e)
 {
  lines.set_X(e.getX());
  lines.set_Y(e.getY());
  lines.repaint();
 }

 public static void main(String [] args)
 {
  JFrame f = new LinesMouse();
  f.setBounds(100, 100, WIDTH, HEIGHT);
  f.setDefaultCloseOperation(3);
  f.setVisible(true);
 }
}

class Lines extends JComponent
{
 LinesMouse lm;
 int x, y;

 Lines(LinesMouse lm)
 {
  this.lm = lm;
 }

 public void set_X(int x)
 {
  this.x = x;
 }

 public void set_Y(int y)
 {
  this.y = y;
 }

 public void paintComponent(Graphics g)
 {
  Graphics2D g2 = (Graphics2D)g;
  float [] f = {6, 6};
  BasicStroke bs = new BasicStroke(1, BasicStroke.CAP_BUTT,
                       BasicStroke.JOIN_BEVEL, 1, f, 0);
  g2.setStroke(bs);
  g2.drawLine(0, y, lm.getWidth(), y);
  g2.drawLine(x, 0, x, lm.getHeight());

  g2.drawString("x = " + x + "; y = " + y + ";", x + 20, y + 20);
 }
}

PM MAIL   Вверх
FlakeMusic
Дата 5.10.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо. А в jfreechart это уже не реализовано? Ведь нужно ещё значения получать.

И ещё как из графика выдернуть значения по координатам?

Это сообщение отредактировал(а) FlakeMusic - 5.10.2009, 11:21
PM MAIL   Вверх
FlakeMusic
Дата 6.10.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В общем разобрался как сделать. Может кому пригодится.

Во первых это пересекающие линии называются Crosshair  smile 

Теперь по дело. Что я сделал:

1. Наследовался от ChartPanel, переопределил mouseMoved().
Код

public void mouseMoved(MouseEvent e) {
    int iX = e.getX(), iY = e.getY();
    this.m_iX = iX;
    this.m_iY = iY;
   
    moveCrosshair();
}


2. Написал функцию, которая устанавливает значения для линий
Код

private void moveCrosshair() {

    Rectangle2D screenDataArea = getScreenDataArea(this.m_iX, this.m_iY);
    XYPlot plot = (XYPlot)chart.getPlot();

    ValueAxis domainAxis = plot.getDomainAxis();
    ValueAxis rangeAxis  = plot.getRangeAxis();

    RectangleEdge domainAxisEdge = plot.getDomainAxisEdge();
    RectangleEdge rangeAxisEdge  = plot.getRangeAxisEdge();

    double dXX = domainAxis.java2DToValue(this.m_dX, screenDataArea, domainAxisEdge);
    double dYY = rangeAxis.java2DToValue(this.m_dY, screenDataArea, rangeAxisEdge);

    plot.setDomainCrosshairValue(dXX);
    plot.setRangeCrosshairValue(dYY);
}


Теперь остался вопрос, чтобы постоянно показывались текущие значения. Кто-нибудь знает как это сделать?
PM MAIL   Вверх
123qw
  Дата 3.4.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



FlakeMusic, 

Похожая проблема, как разобрался? приведи пожалуйста полностью код класса с методом main(), чтобы можно было запустить и посмотреть как это работает, в компонентах JFreeChart я пока не силен
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.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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