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

JavaFX 2.2 — добавление события мыши в полосу в BarChart или StockedBarChart

Я динамически создаю StocckedBarChart в JavaFX 2.2 (см. Фрагмент кода ниже). Я хочу, чтобы каждая полоса действовала как гиперссылка, чтобы при наведении на нее она светилась, а при нажатии на нее открывался экран сведений с дополнительной информацией об источнике. данные, используемые для построения соответствующего столбца на диаграмме.

      final CategoryAxis xAxis = new CategoryAxis();
      final NumberAxis yAxis = new NumberAxis();

        List<String> itemTypes = new ArrayList<String>();
        vipTypes.add("Type A");
        vipTypes.add("Type B");
        vipTypes.add("Type C");


        xAxis.setCategories(FXCollections.<String>observableArrayList(itemTypes));

        m_barChart = new StackedBarChart<String,Number>(xAxis,yAxis);
        m_barChart.setTitle("Item Status");

        XYChart.Series upSer = new XYChart.Series();
        upSer.setName("UP"); 
        XYChart.Series downSer = new XYChart.Series();
        downSer.setName("Down");
        XYChart.Series unknownSer = new XYChart.Series();
        unknownSer.setName("Unknown");

     for(Item item: ItemsList)
        {
            upSer.getData().add(new XYChart.Data<String, Number>(item.getName(),        item.getCountOfUpItems());
            downSer.getData().add(new XYChart.Data<String, Number>(item.getName(),        item.getCountOfDownItems());
            unknownSer.getData().add(new XYChart.Data<String, Number>(item.getName(),      item.getCountOfUnknownItems());
        }

m_barChart.getData().addAll(upSer, downSer, unknownSer);

Я хочу сделать что-то вроде:

   //get a specific bar.

   Node n = m_barChart.lookup("what should I look for??");

            if (n != null && n instanceof Path) 
            {
                final Path path = (Path) n;
                final Glow glow = new Glow(.8);
                path.setEffect(null);
                path.setOnMouseEntered(new EventHandler<MouseEvent>() 
                        {
                    @Override public void handle(MouseEvent e) 
                    {
                        path.setEffect(glow);
                    }
                        });
                path.setOnMouseExited(new EventHandler<MouseEvent>() {
                    @Override public void handle(MouseEvent e) {
                        path.setEffect(null);
                    }
                });
                        path.setOnMouseCLicked(new EventHandler<MouseEvent>() {
                    @Override public void handle(MouseEvent e) {
                        openDetailsScreen(<selected Bar>);
                    }
                });
            }
02.01.2013

Ответы:


1

Вы можете получить доступ к Node через XYChart.Data#getNode(). Вот пример модификаций, примененных к вам:

private final Glow glow = new Glow(.8);

private void setupHover(XYChart.Series<String, Number> series) {
    for (final XYChart.Data<String, Number> dt : series.getData()) {
        final Node n = dt.getNode();

        n.setEffect(null);
        n.setOnMouseEntered(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                n.setEffect(glow);
            }
        });
        n.setOnMouseExited(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                n.setEffect(null);
            }
        });
        n.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent e) {
                System.out.println("openDetailsScreen(<selected Bar>)");
                System.out.println(dt.getXValue() + " : " + dt.getYValue());
            }
        });
    }
}

Вызовите этот метод после m_barChart.getData().addAll(upSer, downSer, unknownSer):

m_barChart.getData().addAll(upSer, downSer, unknownSer);
setupHover(upSer);
setupHover(downSer);
setupHover(unknownSer);

Получить текущие значения бара через dt.getXValue() и dt.getYValue().

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

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

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

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

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

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

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

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