MainUI.java 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749
  1. package com.its.cctv.ui;
  2. import com.intellij.uiDesigner.core.GridConstraints;
  3. import com.intellij.uiDesigner.core.GridLayoutManager;
  4. import com.intellij.uiDesigner.core.Spacer;
  5. import com.its.app.AppUtils;
  6. import com.its.app.utils.SysUtils;
  7. import com.its.cctv.config.DebugConfig;
  8. import com.its.cctv.domain.NET;
  9. import com.its.cctv.entity.TbCctvCtlr;
  10. import com.its.cctv.global.AppRepository;
  11. import com.sun.management.OperatingSystemMXBean;
  12. import lombok.Getter;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.apache.commons.lang.StringUtils;
  15. import javax.swing.Timer;
  16. import javax.swing.*;
  17. import javax.swing.border.MatteBorder;
  18. import javax.swing.plaf.FontUIResource;
  19. import javax.swing.table.DefaultTableCellRenderer;
  20. import javax.swing.table.TableCellRenderer;
  21. import javax.swing.table.TableColumnModel;
  22. import javax.swing.text.StyleContext;
  23. import java.awt.*;
  24. import java.awt.datatransfer.Clipboard;
  25. import java.awt.datatransfer.StringSelection;
  26. import java.awt.event.ActionEvent;
  27. import java.awt.event.ActionListener;
  28. import java.awt.event.MouseAdapter;
  29. import java.awt.event.MouseEvent;
  30. import java.io.File;
  31. import java.io.IOException;
  32. import java.lang.management.ManagementFactory;
  33. import java.util.List;
  34. import java.util.*;
  35. @Slf4j
  36. @Getter
  37. public class MainUI {
  38. private static MainUI _instance = null;
  39. private SubUIController subUIController = null;
  40. private JFrame jFrame = null;
  41. private final OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
  42. private Timer timer;
  43. private Long tick = Long.valueOf(0);
  44. private TbCctvCtlr selObj = null;
  45. private CtlrSttsTableModel ctlrSttsTableModel = null;
  46. private TableCellRenderer cellRenderer = new CtlrSttsTableCellRenderer();
  47. private JPanel rootPanel;
  48. private JPanel pnlCtlr;
  49. private JPanel pnlLog;
  50. private JPanel pnlLogTitle;
  51. private JPanel pnlCtlrTitle;
  52. private JButton btnLogDirOpen;
  53. private JButton btnLogPause;
  54. private JCheckBox chkLogPause;
  55. private JLabel lblSystime;
  56. private JPanel pnlStatusBar;
  57. private JTable tblCtlrList;
  58. private JTextArea taLog;
  59. private JButton btnLogCopy;
  60. private JLabel lblTotal;
  61. private JLabel lblError;
  62. private JLabel lblCpuRate;
  63. private JLabel lblMemoryUsage;
  64. private JPanel pnlControl;
  65. private JButton btnControl;
  66. private JButton btnResetSw;
  67. private JButton btnResetHw;
  68. private JButton btnDisconnect;
  69. private JTextField txtName;
  70. private JTextField txtId;
  71. private JCheckBox chkPtzControl;
  72. private boolean isUpdatable;
  73. private DebugConfig debugConfig;
  74. public static MainUI getInstance() {
  75. return _instance;
  76. }
  77. public void displaySystime() {
  78. lblSystime.setText(" " + SysUtils.getSysTimeStr() + " ");
  79. updateCommSttsTotal();
  80. }
  81. public void displayResource() {
  82. long memoryUsage = Math.round(((double) (osBean.getTotalPhysicalMemorySize() - osBean.getFreePhysicalMemorySize())) / (double) osBean.getTotalPhysicalMemorySize() * 100.0);
  83. lblMemoryUsage.setText(String.valueOf(memoryUsage));
  84. double cpuLoad = osBean.getSystemCpuLoad();
  85. if (cpuLoad >= 0.0 && cpuLoad <= 1.0) {
  86. lblCpuRate.setText(String.valueOf(Math.round(cpuLoad * 100.0)));
  87. } else {
  88. lblCpuRate.setText("---");
  89. }
  90. }
  91. public MainUI(JFrame jFrame) {
  92. System.setProperty("awt.useSystemAAFontSettings", "false"); // AntiAliasing false
  93. this.debugConfig = (DebugConfig) AppUtils.getBean(DebugConfig.class);
  94. this.isUpdatable = false;
  95. this.jFrame = jFrame;
  96. if (_instance == null) {
  97. _instance = this;
  98. subUIController = new SubUIController(jFrame);
  99. subUIController.setVisible(false);
  100. }
  101. try {
  102. Font font = Font.createFont(Font.TRUETYPE_FONT, new File("fonts/D2Coding.ttc"));
  103. GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
  104. ge.registerFont(font);
  105. } catch (FontFormatException e) {
  106. } catch (IOException e) {
  107. }
  108. Font d2font = new Font("D2Coding", Font.PLAIN, 14);
  109. if (d2font != null) {
  110. taLog.setFont(d2font);
  111. }
  112. displaySystime();
  113. displayResource();
  114. timer = new Timer(1000, new ActionListener() {
  115. public void actionPerformed(ActionEvent evt) {
  116. displaySystime();
  117. tick++;
  118. if (tick % 5 == 0) {
  119. displayResource();
  120. }
  121. }
  122. });
  123. timer.start();
  124. chkPtzControl.setSelected(this.debugConfig.isSttsLog());
  125. chkLogPause.setFocusable(false);
  126. btnLogPause.setFocusable(false);
  127. btnLogDirOpen.setFocusable(false);
  128. btnLogCopy.setFocusable(false);
  129. //initTblListUI();
  130. btnLogPause.addActionListener(new ActionListener() {
  131. @Override
  132. public void actionPerformed(ActionEvent e) {
  133. taLog.setText(null);
  134. }
  135. });
  136. btnLogDirOpen.addActionListener(new ActionListener() {
  137. @Override
  138. public void actionPerformed(ActionEvent e) {
  139. Runtime rt = Runtime.getRuntime();
  140. try {
  141. rt.exec("explorer.exe logs");
  142. } catch (IOException ex) {
  143. throw new RuntimeException(ex);
  144. }
  145. }
  146. });
  147. chkPtzControl.addActionListener(new ActionListener() {
  148. @Override
  149. public void actionPerformed(ActionEvent e) {
  150. debugConfig.setSttsLog(chkPtzControl.isSelected());
  151. }
  152. });
  153. chkLogPause.addActionListener(new ActionListener() {
  154. @Override
  155. public void actionPerformed(ActionEvent e) {
  156. JTextAreaOutputStream.isLoggingPause = chkLogPause.isSelected();
  157. }
  158. });
  159. btnLogCopy.addActionListener(new ActionListener() {
  160. @Override
  161. public void actionPerformed(ActionEvent e) {
  162. StringSelection stringSelection = new StringSelection(taLog.getText());
  163. Clipboard clpBrd = Toolkit.getDefaultToolkit().getSystemClipboard();
  164. clpBrd.setContents(stringSelection, null);
  165. }
  166. });
  167. tblCtlrList.addMouseListener(new MouseAdapter() {
  168. public void mouseClicked(MouseEvent me) {
  169. // double click
  170. if (me.getClickCount() == 2) {
  171. if (!updateControllerInfo()) {
  172. // if (subUIController.isVisible()) {
  173. // subUIController.setVisible(false);
  174. // }
  175. }
  176. }
  177. }
  178. });
  179. btnDisconnect.addActionListener(new ActionListener() {
  180. @Override
  181. public void actionPerformed(ActionEvent e) {
  182. controlController(1);
  183. }
  184. });
  185. btnResetHw.addActionListener(new ActionListener() {
  186. @Override
  187. public void actionPerformed(ActionEvent e) {
  188. controlController(2);
  189. }
  190. });
  191. btnResetSw.addActionListener(new ActionListener() {
  192. @Override
  193. public void actionPerformed(ActionEvent e) {
  194. controlController(3);
  195. }
  196. });
  197. btnControl.addActionListener(new ActionListener() {
  198. @Override
  199. public void actionPerformed(ActionEvent e) {
  200. controlController(4);
  201. }
  202. });
  203. }
  204. // private void showStream() {
  205. // String streamUrl = "rtsp://118.40.176.110:1935/live/CCAM0020.stream";
  206. // System.setProperty("apple.awt.graphics.UseQuartz", "false");
  207. //
  208. //
  209. // pipe = new Pipeline("pipeline");
  210. // pipe.getBus().connect(new Bus.ERROR() {
  211. // public void errorMessage(GstObject source, int code, String message) {
  212. // System.out.println("Error occurred: " + message);
  213. // Gst.quit();
  214. // }
  215. // });
  216. // pipe.getBus().connect(new Bus.STATE_CHANGED() {
  217. // public void stateChanged(GstObject source, State old, State current, State pending) {
  218. // if (source == pipe) {
  219. // System.out.println("Pipeline state changed from " + old + " to " + current);
  220. // }
  221. // }
  222. // });
  223. // pipe.getBus().connect(new Bus.EOS() {
  224. // public void endOfStream(GstObject source) {
  225. // System.out.println("Finished playing file");
  226. // Gst.quit();
  227. // }
  228. // });
  229. //
  230. // pipe.getBus().connect(new Bus.TAG() {
  231. // public void tagsFound(GstObject source, TagList tagList) {
  232. // for (String tag : tagList.getTagNames()) {
  233. // System.out.println("Found tag " + tag + " = "
  234. // + tagList.getValue(tag, 0));
  235. // }
  236. // }
  237. // });
  238. //
  239. // final Element source = ElementFactory.make("rtspsrc", "Source");
  240. // final Element demux = ElementFactory.make("rtpmp4vdepay", "Depay");
  241. // final Element decoder = ElementFactory.make("ffdec_mpeg4", "Decoder");
  242. // final Element colorspace = ElementFactory.make("ffmpegcolorspace", "Colorspace");
  243. // //final Element sink = ElementFactory.make ("autovideosink", "Output");
  244. //
  245. // SwingUtilities.invokeLater(new Runnable() {
  246. // public void run() {
  247. // // Create the video component and link it in
  248. // VideoComponent videoComponent = new VideoComponent();
  249. // Element videosink = videoComponent.getElement();
  250. //
  251. // source.connect(new Element.PAD_ADDED() {
  252. // public void padAdded(Element element, Pad pad) {
  253. // pad.link(demux.getStaticPad("sink"));
  254. // }
  255. // });
  256. //
  257. // Pad p = new Pad(null, PadDirection.SRC);
  258. // source.addPad(p);
  259. //
  260. // source.set("location", streamUrl); //replace this with your source
  261. //
  262. // pipe.addMany(source, demux, decoder, colorspace, videosink);
  263. // Element.linkMany(demux, decoder, colorspace, videosink);
  264. //
  265. // // Now create a JFrame to display the video output
  266. // JFrame frame = new JFrame("Swing Video Test");
  267. // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  268. // frame.add(videoComponent, BorderLayout.CENTER);
  269. // videoComponent.setPreferredSize(new Dimension(720, 576));
  270. // frame.pack();
  271. // frame.setVisible(true);
  272. //
  273. // // Start the pipeline processing
  274. // pipe.play();
  275. // }
  276. // });
  277. // }
  278. /**
  279. * 제어기 명령 처리
  280. *
  281. * @param type
  282. */
  283. public void controlController(int type) {
  284. if (this.selObj == null) {
  285. JOptionPane.showMessageDialog(getRootPanel(), "제어기가 선택되지 않았습니다. 목록을 더블클릭하여 제어기를 선택하세요.", "제어기 선택", JOptionPane.ERROR_MESSAGE);
  286. return;
  287. }
  288. if (this.selObj.getNetState() == NET.CLOSED) {
  289. JOptionPane.showMessageDialog(getRootPanel(), "제어기가 현재 연결이 되어 있지 않습니다.", "제어기 연결 상태", JOptionPane.ERROR_MESSAGE);
  290. return;
  291. }
  292. boolean isDirectCmd = true;
  293. String message = "", title = "";
  294. switch (type) {
  295. case 1:
  296. message = "제어기와의 연결을 종료 하시겠습니까?";
  297. title = "제어기 연결 종료";
  298. break;
  299. case 2:
  300. message = "제어기를 리셋(HW) 하시겠습니까?";
  301. title = "제어기 리셋(HW)";
  302. break;
  303. case 3:
  304. message = "제어기를 리셋(SW) 하시겠습니까?";
  305. title = "제어기 리셋(SW)";
  306. break;
  307. case 4:
  308. isDirectCmd = false;
  309. break;
  310. default:
  311. return;
  312. }
  313. if (isDirectCmd) {
  314. if (JOptionPane.showConfirmDialog(getRootPanel(), message, title, JOptionPane.YES_NO_OPTION) != 0) {
  315. return;
  316. }
  317. }
  318. boolean result = false;
  319. switch (type) {
  320. case 1:
  321. result = this.selObj.channelClose();
  322. break;
  323. case 2:
  324. result = this.selObj.resetHw();
  325. break;
  326. case 3:
  327. result = this.selObj.resetSw();
  328. break;
  329. case 4:
  330. result = true;
  331. if (!this.subUIController.isVisible()) {
  332. this.subUIController.setVisible(true);
  333. }
  334. this.subUIController.setState(JFrame.NORMAL);
  335. break;
  336. default:
  337. return;
  338. }
  339. if (!result) {
  340. JOptionPane.showMessageDialog(getRootPanel(), "명령 전송이 실패 하였습니다.", title, JOptionPane.ERROR_MESSAGE);
  341. }
  342. }
  343. public boolean updateControllerInfo() {
  344. if (subUIController.isVisible()) {
  345. //subUIController.setVisible(false);
  346. }
  347. if (!this.isUpdatable) {
  348. return false;
  349. }
  350. int row = tblCtlrList.getSelectedRow();
  351. if (row < 0) {
  352. JOptionPane.showMessageDialog(getRootPanel(), "목록에서 CCTV 를 선택해주세요.", "CCTV 제어", JOptionPane.ERROR_MESSAGE);
  353. return false;
  354. }
  355. txtId.setText("");
  356. txtName.setText("");
  357. CtlrSttsTableModel tableModel = (CtlrSttsTableModel) tblCtlrList.getModel();
  358. this.selObj = tableModel.getControllerInfo(row);
  359. if (this.selObj != null) {
  360. txtId.setText(selObj.getCCTV_CTLR_ID());
  361. txtName.setText(selObj.getCCTV_NM());
  362. subUIController.updateInfo(selObj);
  363. //if (!subUIController.isVisible()) {
  364. // subUIController.setVisible(true);
  365. //}
  366. //subUIController.setState(JFrame.NORMAL);
  367. return true;
  368. }
  369. return false;
  370. }
  371. /**
  372. * 목록 헤더 생성
  373. */
  374. private void initTblListUI(List<TbCctvCtlr> ctlrList) {
  375. this.ctlrSttsTableModel = new CtlrSttsTableModel(ctlrList);
  376. tblCtlrList.setModel(this.ctlrSttsTableModel);
  377. tblCtlrList.getTableHeader().setOpaque(false);
  378. tblCtlrList.getTableHeader().setBackground(Color.LIGHT_GRAY);
  379. tblCtlrList.setRowMargin(1);
  380. //tblCtlrList.setGridColor(Color.LIGHT_GRAY);
  381. tblCtlrList.setRowHeight(tblCtlrList.getRowHeight() + 5);
  382. //tblCtlrList.setRowSelectionAllowed(true);
  383. //tblCtlrList.setColumnSelectionAllowed(false);
  384. tblCtlrList.setBackground(Color.WHITE);
  385. tblCtlrList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  386. //tblCtlrList.setAutoCreateRowSorter(true); // sorting
  387. //tblCtlrList.addMouseListener(new ListMouseListener(null));
  388. TableColumnModel getColumnModel = tblCtlrList.getColumnModel();
  389. getColumnModel.getColumn(0).setPreferredWidth(30); // "S",
  390. getColumnModel.getColumn(1).setPreferredWidth(65); // "번호",
  391. getColumnModel.getColumn(2).setPreferredWidth(110); // "CCTV ID",
  392. getColumnModel.getColumn(3).setPreferredWidth(190); // "명칭",
  393. getColumnModel.getColumn(4).setPreferredWidth(120); // "IP",
  394. getColumnModel.getColumn(5).setPreferredWidth(55); // "PORT",
  395. getColumnModel.getColumn(6).setPreferredWidth(70); // "연결상태",
  396. getColumnModel.getColumn(7).setPreferredWidth(50); // "도어",
  397. getColumnModel.getColumn(8).setPreferredWidth(50); // "팬",
  398. getColumnModel.getColumn(9).setPreferredWidth(50); // "히터",
  399. getColumnModel.getColumn(10).setPreferredWidth(50); // "온도",
  400. getColumnModel.getColumn(11).setPreferredWidth(50); // "영상",
  401. getColumnModel.getColumn(12).setPreferredWidth(170); // "P / T / Z / F",
  402. getColumnModel.getColumn(13).setPreferredWidth(125);
  403. getColumnModel.getColumn(14).setPreferredWidth(125);
  404. getColumnModel.getColumn(0).setMaxWidth(30);
  405. getColumnModel.getColumn(0).setMinWidth(30);
  406. getColumnModel.getColumn(0).setResizable(false);
  407. Color color = UIManager.getColor("Table.gridColor");
  408. MatteBorder border = new MatteBorder(1, 1, 0, 0, color);
  409. tblCtlrList.setBorder(border);
  410. DefaultTableCellRenderer centerAlign = new DefaultTableCellRenderer();
  411. centerAlign.setHorizontalAlignment(JLabel.CENTER);
  412. for (int ii = 0; ii < getColumnModel.getColumnCount(); ii++) {
  413. getColumnModel.getColumn(ii).setCellRenderer(cellRenderer);
  414. }
  415. this.isUpdatable = true;
  416. }
  417. public void updateCommSttsTotal() {
  418. int ctlrTotal = 0;
  419. int ctlrError = 0;
  420. for (Map.Entry<String, TbCctvCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
  421. TbCctvCtlr obj = e.getValue();
  422. if (StringUtils.equals("N", obj.getDEL_YN())) {
  423. ctlrTotal++;
  424. if (!"CMS0".equals(obj.getStts().getCMNC_STTS_CD())) {
  425. ctlrError++;
  426. }
  427. }
  428. }
  429. lblTotal.setText(" " + ctlrTotal + " ");
  430. lblError.setText(" " + ctlrError + " ");
  431. if (this.isUpdatable) {
  432. CtlrSttsTableModel tableModel = (CtlrSttsTableModel) tblCtlrList.getModel();
  433. if (tableModel != null) {
  434. tableModel.fireTableDataChanged();
  435. }
  436. }
  437. }
  438. public void LoadControllerInfo() {
  439. SortedMap<Integer, TbCctvCtlr> ctlrMap = new TreeMap<>();
  440. for (Map.Entry<String, TbCctvCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
  441. TbCctvCtlr obj = e.getValue();
  442. if (StringUtils.equals("N", obj.getDEL_YN())) {
  443. ctlrMap.put(Integer.valueOf(obj.getCCTV_CTLR_NMBR()), obj);
  444. }
  445. }
  446. List<TbCctvCtlr> ctlrList = new ArrayList<TbCctvCtlr>(ctlrMap.values());
  447. initTblListUI(ctlrList);
  448. updateCommSttsTotal();
  449. }
  450. public void updateCtlrStts(TbCctvCtlr obj) {
  451. if (!this.isUpdatable) {
  452. return;
  453. }
  454. if (this.ctlrSttsTableModel == null) {
  455. return;
  456. }
  457. for (int ii = 0; ii < this.ctlrSttsTableModel.getRowCount(); ii++) {
  458. if (obj.getCCTV_CTLR_ID().equals(this.ctlrSttsTableModel.getValueAt(ii, 2).toString())) {
  459. int modelRow = tblCtlrList.convertRowIndexToModel(ii);
  460. this.ctlrSttsTableModel.setValue(obj, ii, modelRow);
  461. break;
  462. }
  463. }
  464. CtlrSttsTableModel tableModel = (CtlrSttsTableModel) tblCtlrList.getModel();
  465. if (tableModel != null) {
  466. tableModel.fireTableDataChanged();
  467. }
  468. }
  469. {
  470. // GUI initializer generated by IntelliJ IDEA GUI Designer
  471. // >>> IMPORTANT!! <<<
  472. // DO NOT EDIT OR ADD ANY CODE HERE!
  473. $$$setupUI$$$();
  474. }
  475. /**
  476. * Method generated by IntelliJ IDEA GUI Designer
  477. * >>> IMPORTANT!! <<<
  478. * DO NOT edit this method OR call it in your code!
  479. *
  480. * @noinspection ALL
  481. */
  482. private void $$$setupUI$$$() {
  483. rootPanel = new JPanel();
  484. rootPanel.setLayout(new GridLayoutManager(3, 1, new Insets(0, 0, 0, 0), -1, -1));
  485. pnlCtlr = new JPanel();
  486. pnlCtlr.setLayout(new GridLayoutManager(3, 1, new Insets(10, 4, 0, 4), -1, -1));
  487. rootPanel.add(pnlCtlr, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
  488. pnlCtlrTitle = new JPanel();
  489. pnlCtlrTitle.setLayout(new GridLayoutManager(1, 6, new Insets(0, 0, 0, 2), -1, -1));
  490. pnlCtlr.add(pnlCtlrTitle, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
  491. final JLabel label1 = new JLabel();
  492. Font label1Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label1.getFont());
  493. if (label1Font != null) label1.setFont(label1Font);
  494. label1.setHorizontalAlignment(2);
  495. label1.setHorizontalTextPosition(11);
  496. label1.setIcon(new ImageIcon(getClass().getResource("/static/image/controller.png")));
  497. label1.setText("제어기 정보");
  498. pnlCtlrTitle.add(label1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  499. final Spacer spacer1 = new Spacer();
  500. pnlCtlrTitle.add(spacer1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
  501. final JLabel label2 = new JLabel();
  502. Font label2Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label2.getFont());
  503. if (label2Font != null) label2.setFont(label2Font);
  504. label2.setText("제어기 전체: ");
  505. pnlCtlrTitle.add(label2, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  506. final JLabel label3 = new JLabel();
  507. Font label3Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label3.getFont());
  508. if (label3Font != null) label3.setFont(label3Font);
  509. label3.setText("통신 이상: ");
  510. pnlCtlrTitle.add(label3, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  511. lblTotal = new JLabel();
  512. Font lblTotalFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblTotal.getFont());
  513. if (lblTotalFont != null) lblTotal.setFont(lblTotalFont);
  514. lblTotal.setHorizontalAlignment(0);
  515. lblTotal.setHorizontalTextPosition(0);
  516. lblTotal.setText(" -");
  517. pnlCtlrTitle.add(lblTotal, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  518. lblError = new JLabel();
  519. Font lblErrorFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblError.getFont());
  520. if (lblErrorFont != null) lblError.setFont(lblErrorFont);
  521. lblError.setForeground(new Color(-65536));
  522. lblError.setHorizontalAlignment(0);
  523. lblError.setHorizontalTextPosition(0);
  524. lblError.setText(" -");
  525. pnlCtlrTitle.add(lblError, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  526. final JScrollPane scrollPane1 = new JScrollPane();
  527. pnlCtlr.add(scrollPane1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
  528. tblCtlrList = new JTable();
  529. Font tblCtlrListFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, tblCtlrList.getFont());
  530. if (tblCtlrListFont != null) tblCtlrList.setFont(tblCtlrListFont);
  531. scrollPane1.setViewportView(tblCtlrList);
  532. pnlControl = new JPanel();
  533. pnlControl.setLayout(new GridLayoutManager(1, 8, new Insets(0, 0, 0, 2), 1, 1));
  534. pnlCtlr.add(pnlControl, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
  535. btnControl = new JButton();
  536. Font btnControlFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnControl.getFont());
  537. if (btnControlFont != null) btnControl.setFont(btnControlFont);
  538. btnControl.setText("제어");
  539. pnlControl.add(btnControl, new GridConstraints(0, 7, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  540. final Spacer spacer2 = new Spacer();
  541. pnlControl.add(spacer2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
  542. btnResetSw = new JButton();
  543. Font btnResetSwFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnResetSw.getFont());
  544. if (btnResetSwFont != null) btnResetSw.setFont(btnResetSwFont);
  545. btnResetSw.setText("리셋(SW)");
  546. pnlControl.add(btnResetSw, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  547. btnResetHw = new JButton();
  548. Font btnResetHwFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnResetHw.getFont());
  549. if (btnResetHwFont != null) btnResetHw.setFont(btnResetHwFont);
  550. btnResetHw.setText("리셋(HW)");
  551. pnlControl.add(btnResetHw, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  552. btnDisconnect = new JButton();
  553. Font btnDisconnectFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnDisconnect.getFont());
  554. if (btnDisconnectFont != null) btnDisconnect.setFont(btnDisconnectFont);
  555. btnDisconnect.setText("연결끊기");
  556. pnlControl.add(btnDisconnect, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  557. txtName = new JTextField();
  558. txtName.setEditable(false);
  559. Font txtNameFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtName.getFont());
  560. if (txtNameFont != null) txtName.setFont(txtNameFont);
  561. txtName.setHorizontalAlignment(2);
  562. txtName.setText("제어기 명칭");
  563. pnlControl.add(txtName, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(200, -1), new Dimension(200, -1), new Dimension(200, -1), 0, false));
  564. txtId = new JTextField();
  565. txtId.setEditable(false);
  566. Font txtIdFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtId.getFont());
  567. if (txtIdFont != null) txtId.setFont(txtIdFont);
  568. txtId.setHorizontalAlignment(0);
  569. txtId.setText("ID");
  570. pnlControl.add(txtId, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(100, -1), new Dimension(100, -1), new Dimension(100, -1), 0, false));
  571. final JLabel label4 = new JLabel();
  572. Font label4Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label4.getFont());
  573. if (label4Font != null) label4.setFont(label4Font);
  574. label4.setIcon(new ImageIcon(getClass().getResource("/static/image/select.png")));
  575. label4.setText("선택한 제어기 ");
  576. pnlControl.add(label4, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  577. pnlLog = new JPanel();
  578. pnlLog.setLayout(new GridLayoutManager(2, 1, new Insets(0, 4, 0, 4), -1, -1));
  579. rootPanel.add(pnlLog, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, new Dimension(-1, 200), new Dimension(-1, 200), new Dimension(-1, 200), 0, false));
  580. pnlLogTitle = new JPanel();
  581. pnlLogTitle.setLayout(new GridLayoutManager(1, 7, new Insets(0, 0, 0, 2), 1, 1));
  582. pnlLog.add(pnlLogTitle, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
  583. final JLabel label5 = new JLabel();
  584. Font label5Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label5.getFont());
  585. if (label5Font != null) label5.setFont(label5Font);
  586. label5.setHorizontalAlignment(2);
  587. label5.setIcon(new ImageIcon(getClass().getResource("/static/image/logging.png")));
  588. label5.setText("시스템 로그");
  589. pnlLogTitle.add(label5, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  590. final Spacer spacer3 = new Spacer();
  591. pnlLogTitle.add(spacer3, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
  592. btnLogDirOpen = new JButton();
  593. Font btnLogDirOpenFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogDirOpen.getFont());
  594. if (btnLogDirOpenFont != null) btnLogDirOpen.setFont(btnLogDirOpenFont);
  595. btnLogDirOpen.setHorizontalTextPosition(0);
  596. btnLogDirOpen.setText("로그 폴더");
  597. pnlLogTitle.add(btnLogDirOpen, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  598. btnLogPause = new JButton();
  599. Font btnLogPauseFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogPause.getFont());
  600. if (btnLogPauseFont != null) btnLogPause.setFont(btnLogPauseFont);
  601. btnLogPause.setHorizontalTextPosition(0);
  602. btnLogPause.setText("지우기");
  603. pnlLogTitle.add(btnLogPause, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  604. chkLogPause = new JCheckBox();
  605. Font chkLogPauseFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, chkLogPause.getFont());
  606. if (chkLogPauseFont != null) chkLogPause.setFont(chkLogPauseFont);
  607. chkLogPause.setHorizontalAlignment(0);
  608. chkLogPause.setHorizontalTextPosition(11);
  609. chkLogPause.setText("멈춤");
  610. pnlLogTitle.add(chkLogPause, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  611. btnLogCopy = new JButton();
  612. Font btnLogCopyFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogCopy.getFont());
  613. if (btnLogCopyFont != null) btnLogCopy.setFont(btnLogCopyFont);
  614. btnLogCopy.setText("복사");
  615. pnlLogTitle.add(btnLogCopy, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  616. chkPtzControl = new JCheckBox();
  617. Font chkPtzControlFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, chkPtzControl.getFont());
  618. if (chkPtzControlFont != null) chkPtzControl.setFont(chkPtzControlFont);
  619. chkPtzControl.setHorizontalAlignment(0);
  620. chkPtzControl.setText("상태정보 ");
  621. pnlLogTitle.add(chkPtzControl, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  622. final JScrollPane scrollPane2 = new JScrollPane();
  623. Font scrollPane2Font = this.$$$getFont$$$("D2Coding", Font.PLAIN, 12, scrollPane2.getFont());
  624. if (scrollPane2Font != null) scrollPane2.setFont(scrollPane2Font);
  625. pnlLog.add(scrollPane2, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
  626. taLog = new JTextArea();
  627. taLog.setBackground(new Color(-16777216));
  628. taLog.setCaretColor(new Color(-1));
  629. taLog.setEditable(false);
  630. Font taLogFont = this.$$$getFont$$$("D2Coding", Font.PLAIN, 14, taLog.getFont());
  631. if (taLogFont != null) taLog.setFont(taLogFont);
  632. taLog.setForeground(new Color(-1));
  633. taLog.setMargin(new Insets(4, 4, 4, 4));
  634. taLog.setText("[10:50:08.561] [ INFO] ************************************************************************************\n[10:50:08.561] [ INFO] ** Center Communication Server Information **\n[10:50:08.561] [ INFO] ** bindAddress: 0.0.0.0\n[10:50:08.561] [ INFO] ** listenPort: 9901\n[10:50:08.561] [ INFO] ** backlog: 1024\n[10:50:08.561] [ INFO] ** acceptThreads: 16\n[10:50:08.561] [ INFO] ** workerThreads: 16\n[10:50:08.561] [ INFO] ************************************************************************************\n");
  635. scrollPane2.setViewportView(taLog);
  636. pnlStatusBar = new JPanel();
  637. pnlStatusBar.setLayout(new GridLayoutManager(1, 7, new Insets(0, 4, 4, 4), -1, -1));
  638. rootPanel.add(pnlStatusBar, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
  639. final Spacer spacer4 = new Spacer();
  640. pnlStatusBar.add(spacer4, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
  641. lblSystime = new JLabel();
  642. Font lblSystimeFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblSystime.getFont());
  643. if (lblSystimeFont != null) lblSystime.setFont(lblSystimeFont);
  644. lblSystime.setHorizontalAlignment(0);
  645. lblSystime.setHorizontalTextPosition(0);
  646. lblSystime.setText(" 2022-08-04 13:24:33 ");
  647. pnlStatusBar.add(lblSystime, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  648. final JLabel label6 = new JLabel();
  649. label6.setIcon(new ImageIcon(getClass().getResource("/static/image/on.png")));
  650. label6.setText(" ");
  651. pnlStatusBar.add(label6, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  652. lblCpuRate = new JLabel();
  653. Font lblCpuRateFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblCpuRate.getFont());
  654. if (lblCpuRateFont != null) lblCpuRate.setFont(lblCpuRateFont);
  655. lblCpuRate.setHorizontalAlignment(2);
  656. lblCpuRate.setHorizontalTextPosition(0);
  657. lblCpuRate.setText(" ");
  658. pnlStatusBar.add(lblCpuRate, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(40, -1), new Dimension(40, -1), new Dimension(40, -1), 0, false));
  659. lblMemoryUsage = new JLabel();
  660. Font lblMemoryUsageFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblMemoryUsage.getFont());
  661. if (lblMemoryUsageFont != null) lblMemoryUsage.setFont(lblMemoryUsageFont);
  662. lblMemoryUsage.setHorizontalAlignment(2);
  663. lblMemoryUsage.setHorizontalTextPosition(0);
  664. lblMemoryUsage.setText(" ");
  665. pnlStatusBar.add(lblMemoryUsage, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(40, -1), new Dimension(40, -1), new Dimension(40, -1), 0, false));
  666. final JLabel label7 = new JLabel();
  667. Font label7Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label7.getFont());
  668. if (label7Font != null) label7.setFont(label7Font);
  669. label7.setHorizontalAlignment(0);
  670. label7.setHorizontalTextPosition(0);
  671. label7.setText(" CPU 사용율(%):");
  672. pnlStatusBar.add(label7, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  673. final JLabel label8 = new JLabel();
  674. Font label8Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label8.getFont());
  675. if (label8Font != null) label8.setFont(label8Font);
  676. label8.setHorizontalAlignment(0);
  677. label8.setHorizontalTextPosition(0);
  678. label8.setText(" 메모리 사용율(%):");
  679. pnlStatusBar.add(label8, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
  680. }
  681. /**
  682. * @noinspection ALL
  683. */
  684. private Font $$$getFont$$$(String fontName, int style, int size, Font currentFont) {
  685. if (currentFont == null) return null;
  686. String resultName;
  687. if (fontName == null) {
  688. resultName = currentFont.getName();
  689. } else {
  690. Font testFont = new Font(fontName, Font.PLAIN, 10);
  691. if (testFont.canDisplay('a') && testFont.canDisplay('1')) {
  692. resultName = fontName;
  693. } else {
  694. resultName = currentFont.getName();
  695. }
  696. }
  697. Font font = new Font(resultName, style >= 0 ? style : currentFont.getStyle(), size >= 0 ? size : currentFont.getSize());
  698. boolean isMac = System.getProperty("os.name", "").toLowerCase(Locale.ENGLISH).startsWith("mac");
  699. Font fontWithFallback = isMac ? new Font(font.getFamily(), font.getStyle(), font.getSize()) : new StyleContext().getFont(font.getFamily(), font.getStyle(), font.getSize());
  700. return fontWithFallback instanceof FontUIResource ? fontWithFallback : new FontUIResource(fontWithFallback);
  701. }
  702. /**
  703. * @noinspection ALL
  704. */
  705. public JComponent $$$getRootComponent$$$() {
  706. return rootPanel;
  707. }
  708. }