|
javafx, в tableview дублируются последние строки
#38744083
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
|
|
|
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 раза.
|
|
|