Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFx. обновление текста Label на форме, циклично / 2 сообщений из 2, страница 1 из 1
31.01.2017, 15:36
    #39395566
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFx. обновление текста Label на форме, циклично
Здравствуйте.
Задача такая: есть простое приложение с JavaFx формой.
На форме SplitPane. На каждой половине есть Label по центру.
Как по клику (за старт работы формы взят клик по форме) запустить процесс ежесекундного обновления текста в Labelaх в одном потоке?

Нагуглил своеобразное решение - в ивенте setOnMouseClicked создать вспомогательную нить JavaFx приложения, которая обновит значения. Но вот беда в том, что я не знаю как в этой же нити обновить второй лейбл другим значением.

Вариант добавления нового треда не рассматриваю потому, что не хочется возиться с рассинхронизацией обновлений.


Код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
package AllClasses;

import javafx.application.*;
import javafx.concurrent.Task;
import javafx.geometry.Orientation;
import javafx.scene.*;
import javafx.scene.control.Label;
import javafx.scene.control.SplitPane;
import javafx.stage.*;
import javafx.scene.layout.*;

import java.io.*;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

public class Main extends Application {
    Map<String, Integer> dictionary = new HashMap<>();

    public static void main(String[] args) {
        launch(args);
    }

    public void init() {
        String filePath = "C:\\!work_folder\\new  8.txt";
        try {
            BufferedReader reader = new BufferedReader(new FileReader(filePath));
            int cnt = 0;
            while (reader.ready()) {
                String line = new String(reader.readLine().getBytes(), Charset.forName("UTF-8"));
                dictionary.put(line,cnt++);
            }
        } catch (FileNotFoundException e) {
            System.out.println("Не найден файл " + filePath);
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("Ошибка чтения файла " + filePath);
            e.printStackTrace();
        }
    }

    public void start(Stage myStage) {

        myStage.setTitle("JavaFXSkeleton.");


        SplitPane sp = new SplitPane();
        sp.setOrientation(Orientation.VERTICAL);
        Label labelUp = new Label("test");
        Label labelDw = new Label("тест");


        Scene scene = new Scene(sp, 800, 800);
        myStage.setScene(scene);

        final StackPane sp1 = new StackPane();
        sp1.getChildren().add(labelUp);
        final StackPane sp2 = new StackPane();
        sp2.getChildren().add(labelDw);

        sp.setOnMouseClicked(event -> {

            Task<Void> task = new Task<Void>() {
                @Override
                public Void call() throws Exception {
                    for (Map.Entry<String, Integer> pair : dictionary.entrySet()){
                        updateMessage(pair.getKey());
                        Thread.sleep(1000);
                    }
                    return null ;
                }
            };
            task.messageProperty().addListener((obs, oldMessage, newMessage) -> labelUp.setText(newMessage));
//в идеале нужно labelDw значением pair.value. 
//            task.messageProperty().addListener((obs, oldMessage, newMessage) -> labelDw.setText(newMessage)); 
            new Thread(task).start();
        });

        sp.getItems().addAll(sp1, sp2);
        sp.setDividerPositions(0.5f, 0.5f);

        myStage.show();
    }

}
...
Рейтинг: 0 / 0
31.01.2017, 15:38
    #39395569
wolfio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFx. обновление текста Label на форме, циклично
забыл сказать - файл содержит просто любые слова в одну колонку, в тексте.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFx. обновление текста Label на форме, циклично / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]