powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / javafx, в tableview дублируются последние строки
3 сообщений из 3, страница 1 из 1
javafx, в tableview дублируются последние строки
    #38744083
Юрий321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package transm.teamcast;

import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.ResourceBundle;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.ImageView;
import javafx.util.Callback;
import org.snmp4j.smi.OID;
import transm.Settings;
import transm.snmp.SNMPPoller;

/**
 * FXML Controller class
 *
 * @author yura
 */
public class TeamCastStateController implements Initializable {

    /**
     * Initializes the controller class.
     */
    private List<OID> oids = Arrays.asList(
            new OID(".1.3.6.1.4.1.50001.200.1"),
            new OID(".1.3.6.1.4.1.50001.200.2"),
            new OID(".1.3.6.1.4.1.50001.200.3"),
            new OID(".1.3.6.1.4.1.50001.200.4"),
            new OID(".1.3.6.1.4.1.50001.200.5"),
            new OID(".1.3.6.1.4.1.50001.200.6"),
            new OID(".1.3.6.1.4.1.50001.200.7"),
            new OID(".1.3.6.1.4.1.50001.200.8"),
            new OID(".1.3.6.1.4.1.50001.200.9"),
            new OID(".1.3.6.1.4.1.50001.200.11"),
            new OID(".1.3.6.1.4.1.50001.200.12"),
            new OID(".1.3.6.1.4.1.50001.200.36")
    );

    private SNMPPoller poller = new SNMPPoller(
            Settings.server, Settings.port, Settings.community, Settings.timeout, oids);

    private HashMap<String, String> ledStates = new HashMap<String, String>() {
        {
            put("0", "/pics/norm_16.png");
            put("1", "/pics/alarm_16.png");
        }
    };

    @FXML
    TableView<DataHolder> tableStatus;
    @FXML
    TableColumn<DataHolder, String> tableColumnPic;
    @FXML
    TableColumn<DataHolder, String> tableColumnTitle;

    ObservableList<DataHolder> data = FXCollections.observableArrayList(); // The table's data

    @Override
    public void initialize(URL url, ResourceBundle rb) {

        tableStatus.setItems(data);

        tableColumnTitle.prefWidthProperty().bind(tableStatus.widthProperty().multiply(0.75)); // 75%
        tableColumnPic.prefWidthProperty().bind(tableStatus.widthProperty().multiply(0.25)); // 25%

        tableColumnTitle.setCellValueFactory(new PropertyValueFactory<DataHolder, String>("title"));
        tableColumnTitle.setCellFactory(new Callback<TableColumn<DataHolder, String>, TableCell<DataHolder, String>>() {
            @Override
            public TableCell<DataHolder, String> call(TableColumn<DataHolder, String> param) {
                TableCell<DataHolder, String> cell = new TableCell<DataHolder, String>() {
                    @Override
                    public void updateItem(String item, boolean empty) {
                        if (item != null) {
                            Label titleLabel = new Label(item);
                            setGraphic(titleLabel);
                            setAlignment(Pos.CENTER_RIGHT);
                        }
                    }
                };
                return cell;
            }
        });

        tableColumnPic.setCellValueFactory(new PropertyValueFactory<DataHolder, String>("pic"));
        tableColumnPic.setCellFactory(new Callback<TableColumn<DataHolder, String>, TableCell<DataHolder, String>>() {
            @Override
            public TableCell<DataHolder, String> call(TableColumn<DataHolder, String> param) {
                TableCell<DataHolder, String> cell = new TableCell<DataHolder, String>() {
                    @Override
                    public void updateItem(String item, boolean empty) {
                        if (item != null && ledStates.get(item) != null) {
                            ImageView imgStatus = new ImageView(ledStates.get(item));
                            setGraphic(imgStatus);
                            setAlignment(Pos.CENTER);
                        }
                    }
                };
                return cell;
            }
        });

        poller.setRunning(true);
        poller.start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        showData();
                        Thread.sleep(1000);
                    } catch (Exception ex) {
                        ex.printStackTrace(System.err);
                    }
                }
            }
        }).start();
        

    }

    private void showData() {
        List<DataHolder> tmpData = new ArrayList();
  
        if ("0".equals(poller.getData("1.3.6.1.4.1.50001.200.1"))) {
            tmpData.add(new DataHolder("Состояние аппаратной части", "0"));
            tmpData.add(new DataHolder("Состояние ПО", "0"));
        } else if ("1".equals(poller.getData("1.3.6.1.4.1.50001.200.1"))) {
            tmpData.add(new DataHolder("Состояние аппаратной части", "1"));
            tmpData.add(new DataHolder("Состояние ПО", "0"));
        } else if ("2".equals(poller.getData("1.3.6.1.4.1.50001.200.1"))) {
            tmpData.add(new DataHolder("Состояние аппаратной части", "0"));
            tmpData.add(new DataHolder("Состояние ПО", "1"));
        } else if ("3".equals(poller.getData("1.3.6.1.4.1.50001.200.1"))) {
            tmpData.add(new DataHolder("Состояние аппаратной части", "1"));
            tmpData.add(new DataHolder("Состояние ПО", "1"));
        }

        tmpData.add(new DataHolder("Процесс включения", poller.getData("1.3.6.1.4.1.50001.200.2")));
        tmpData.add(new DataHolder("Перегрев модулятора", poller.getData("1.3.6.1.4.1.50001.200.3")));
        tmpData.add(new DataHolder("Совместимость ПО и аппаратной части", poller.getData("1.3.6.1.4.1.50001.200.4")));
        tmpData.add(new DataHolder("Сбой про загрузке", poller.getData("1.3.6.1.4.1.50001.200.5")));
        tmpData.add(new DataHolder("Состояние внутренних коммуникаций", poller.getData("1.3.6.1.4.1.50001.200.6")));
        tmpData.add(new DataHolder("ПО загружено", poller.getData("1.3.6.1.4.1.50001.200.8")));
        tmpData.add(new DataHolder("Проверка лицензий пройдена", poller.getData("1.3.6.1.4.1.50001.200.9")));
        
        data.setAll(tmpData);
        
    }

    public class DataHolder {

        private SimpleStringProperty title = new SimpleStringProperty();
        private SimpleStringProperty pic = new SimpleStringProperty();

        public DataHolder(String title, String pic) {
            this.title.setValue(title);
            this.pic.setValue(pic);
        }

        public String getTitle() {
            return title.get();
        }

        public String getPic() {
            return pic.get();
        }

        public void setTitle(String title) {
            this.title.setValue(title);
        }

        public void setPic(String pic) {
            this.pic.setValue(pic);
        }
    }

}



последняя строка в таблице задваивается.

что не так в коде?

рядом похожий контроллер с таблицей, там последняя строка повторяется вообще 4 раза.
...
Рейтинг: 0 / 0
javafx, в tableview дублируются последние строки
    #38744140
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя из каких попало потоков обновлять UI и забинженые свойства без Platform.runLater()
В JavaFX есть же своя антимация и таймеры должны быть. Зачем этот колхоз с new Thread() было городить?
...
Рейтинг: 0 / 0
javafx, в tableview дублируются последние строки
    #38744143
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Городить CellFactory для того чтобы отобразить текст на колонке таблицы, это по-моему за гранью.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / javafx, в tableview дублируются последние строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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