Nano Hash - криптовалюты, майнинг, программирование

добавить точки при щелчке мыши для jfreechart

Я добавляю точки данных в серию XYLineChart JFreechart, используя прослушиватель мыши, как показано ниже:

public class ChartTest extends ApplicationFrame implements  
    ChartMouseListener, MouseListener, MouseMotionListener {
  private JFreeChart chart;
  private ChartPanel chartPanel;
  private double chartX;
  private double chartY;
  private XYSeries series = new XYSeries("High");
  private XYSeriesCollection data = new XYSeriesCollection();

  public ChartTest(String title) {
    super(title);
    String chartTitle = " ";

    this.chart = ChartFactory.createXYLineChart(chartTitle, "X", "Y", 
            createDataset(), PlotOrientation.VERTICAL, true, true, false);
    chartPanel = new ChartPanel(this.chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(600, 300));
    chartPanel.setMouseZoomable(true, false);
    chartPanel.addChartMouseListener(this);
    chartPanel.addMouseMotionListener(this);
    chartPanel.addMouseListener(this);

  public XYDataset createDataset() {
      data.addSeries(series);
      return data;
  }

  public void mouseClicked(MouseEvent event) {
    int x = event.getX();
    int y = event.getY();     
    Point2D point = chartPanel.translateScreenToJava2D(new Point(x, y));
    XYPlot plot = (XYPlot) chart.getPlot();

    Rectangle2D bounds = chartPanel.getChartRenderingInfo().getPlotInfo().getDataArea();

    RectangleEdge domainAxisEdge = plot.getDomainAxisEdge();
    RectangleEdge rangeAxisEdge = plot.getRangeAxisEdge();
    chartX = domainAxis.java2DToValue(point.getX(), bounds, 
            domainAxisEdge);
    chartY = rangeAxis.java2DToValue(point.getY(), bounds, 
            rangeAxisEdge);

    series.add(chartX, chartY);
  } 

  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            ChartTest test = new ChartTest(
                    "Test");
                test.pack();
                RefineryUtilities.centerFrameOnScreen(test);
                test.setVisible(true);
        }
    });
}

Теперь я хотел бы реализовать функцию перетаскивания мышью, но я застрял в том, как реализовать эту часть. Любая помощь в том, как начать работу, была бы отличной. Спасибо.

09.04.2017

  • У меня есть. Теперь это работает. Ура приятель. Только один вопрос: смогу ли я перетаскивать эти кнопки с помощью этого прослушивателя мыши? 11.04.2017
  • Привет, @trashgod, есть ли способ обновить диаграмму, перетаскивая десятичные точки? Я не могу заставить перетаскивание работать с десятичными точками, например, series.add(2.5, 5) и т. д. Это работает только тогда, когда x=0 сначала добавляется в серию. Когда я пытаюсь перетащить одну из этих точек, выдается исключение серии с сообщением: Нет наблюдения в x = .. . Я хочу добавить случайные точки на график щелчком мыши (что я уже сделал), а затем перетащить эти точки. Как я могу решить эту проблему? 14.04.2017
  • Если это не дубликат, отредактируйте свой вопрос, включив в него минимально воспроизводимый пример, демонстрирующий ваш пересмотренный подход. 14.04.2017

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..