Наведите курсор на строку строки JavaFX [дубликат]

Для этого вам не нужна система (3) . Попробуйте popen (3) и друзья.

15
задан Uniqum 31 January 2013 в 20:58
поделиться

2 ответа

Используйте XYChart.Data.setNode (hoverPane) , чтобы отобразить пользовательский узел для каждой точки данных. Сделайте hoverNode контейнером, как StackPane . Добавьте прослушиватели событий мыши, чтобы вы знали, когда мышь входит в и оставляет узел. В поле ввода введите метку для значения внутри области hoverPane. При выходе удалите метку с панели hover.

Чтобы продемонстрировать эту технику, есть пример пример кода .

Вывод кода примера показан с помощью курсор наводился на 22 узла.

hoverednode [/g6]

30
ответ дан jewelsea 15 August 2018 в 14:24
поделиться
  • 1
    Большое вам спасибо за это, я бы никогда не приблизился к этому. Существует одна заключительная, но второстепенная проблема. Как вы устанавливаете зависание всегда на фронте? Некоторые из моих значений - это 6 цифр цифр, и они скрываются за следующим узлом, который довольно раздражает - см. i.imgur.com/oZgNMNH.png – Uniqum 31 January 2013 в 20:38
  • 2
    Чтобы убедиться, что зависающий узел всегда является верхним узлом, просто вызовите toFront , когда мышь входит в узел. Я обновил образец кода, чтобы включить это. – jewelsea 31 January 2013 в 20:47
  • 3
    Большое спасибо. Я был почти там, но фигурировал label.to Front () сократил бы его, а не только до Front (). Спасибо еще раз за вашу помощь, это очень ценится :) – Uniqum 31 January 2013 в 20:54
  • 4
    toFront () означает, что hoverNode будет inf перед его родителем правильно? Не внутри всей фигуры. Если вы попытаетесь добавить что-то более сложное (больший размер контейнера), вы, вероятно, выйдете за пределы. – Apostolos 20 October 2015 в 14:11
  • 5
    Как можно избежать случаев, когда зависание находится на углу диаграммы, и метка только частично видима? Кажется, что метка только рисует внутри области диаграммы, и мне нужно, чтобы она была заменена, если ее часть находится снаружи, или отправить ее на передний план даже за пределами диаграммы. Любые решения? @jewelsea – Drubio 21 March 2018 в 11:41

Использование всплывающей подсказки:

@Override
public void start(Stage stage) {
    stage.setTitle("Line Chart Sample");
    //defining the axes
    final NumberAxis xAxis = new NumberAxis();
    final NumberAxis yAxis = new NumberAxis();
    xAxis.setLabel("Number of Month");
    //creating the chart
    final LineChart<Number,Number> lineChart = new LineChart<>(xAxis,yAxis);

    lineChart.setTitle("Stock Monitoring, 2010");
    //defining a series
    XYChart.Series series = new XYChart.Series();
    series.setName("My portfolio");
    //populating the series with data
    Random rand = new Random();

    TreeMap<Integer, Integer> data = new TreeMap();

    for(int i = 0; i < 3; i++)
    {
        data.put(rand.nextInt(51), rand.nextInt(51));            
    }

    Set set = data.entrySet();
    Iterator i = set.iterator();
    while(i.hasNext())
    {
        Map.Entry me = (Map.Entry)i.next();
        System.out.println(me.getKey() + " - " + me.getValue());
        series.getData().add(new XYChart.Data(me.getKey(), me.getValue()));
    }

    lineChart.getData().add(series);

    Set<Node> node = lineChart.lookupAll(".default-color0.chart-line-symbol.series0.");                    
    node.forEach((element) -> {
        element.setOnMouseEntered((MouseEvent event1) -> {
            double x = event1.getScreenX();
            double y = event1.getScreenY();
            List keys = new ArrayList(data.keySet());
            System.out.println("over value!");
            if (event1.getSource().toString().contains("data0")) {
                Tooltip t = new Tooltip(data.get(Integer.parseInt(keys.get(0).toString())).toString());
                Tooltip.install(element, t);
            } else if (event1.getSource().toString().contains("data1")) {
                 Tooltip t = new Tooltip(data.get(Integer.parseInt(keys.get(1).toString())).toString());
                 Tooltip.install(element, t);
            } else if (event1.getSource().toString().contains("data2")) {
                 Tooltip t = new Tooltip(data.get(Integer.parseInt(keys.get(2).toString())).toString());
                Tooltip.install(element, t);
            }
        });
    });

    Scene scene  = new Scene(lineChart,800,600);

    stage.setScene(scene);
    stage.show();
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}
1
ответ дан Sedrick 15 August 2018 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: