DataSourceSettingFrame.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package com.leanwo.management;
  2. import java.awt.AWTEvent;
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Dimension;
  6. import java.awt.Image;
  7. import java.awt.Toolkit;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.io.IOException;
  11. import java.net.URL;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.Vector;
  15. import javax.imageio.ImageIO;
  16. import javax.swing.JButton;
  17. import javax.swing.JFrame;
  18. import javax.swing.JOptionPane;
  19. import javax.swing.JScrollPane;
  20. import javax.swing.JTable;
  21. import javax.swing.JToolBar;
  22. import javax.swing.ListSelectionModel;
  23. import javax.swing.table.DefaultTableModel;
  24. import javax.swing.table.TableColumnModel;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. import com.leanwo.management.config.AppConfig;
  28. import com.leanwo.management.config.DataSourceConfig;
  29. import com.leanwo.management.config.DataSourceConfigList;
  30. import com.leanwo.management.util.SpringUtil;
  31. import com.leanwo.management.widget.SelectEventListener;
  32. import com.leanwo.management.widget.SelectObject;
  33. /**
  34. * 数据源设置
  35. *
  36. * @author YangZhiJie
  37. *
  38. */
  39. public class DataSourceSettingFrame extends JFrame {
  40. private static Logger logger = LoggerFactory.getLogger(DataSourceSettingFrame.class);
  41. private JButton saveButton;
  42. // 得到显示器屏幕的宽高
  43. private int width = Toolkit.getDefaultToolkit().getScreenSize().width;
  44. private int height = Toolkit.getDefaultToolkit().getScreenSize().height;
  45. // 定义窗体的宽高
  46. private int windowsWidth = 800;
  47. private int windowsHeight = 400;
  48. private DefaultTableModel tableModel; //表格模型对象
  49. public DataSourceSettingFrame() {
  50. super();
  51. this.initView();
  52. setTitle("数据源配置");
  53. }
  54. private void initView() {
  55. this.setLayout(new BorderLayout(5,5));
  56. JToolBar toolbar = new JToolBar();
  57. toolbar.setFloatable(false);
  58. toolbar.setBorderPainted(false);
  59. add(toolbar, BorderLayout.NORTH);
  60. saveButton = new JButton("保存");
  61. toolbar.add(saveButton);
  62. JScrollPane scrollPane = new JScrollPane(); // 支持滚动
  63. getContentPane().add(scrollPane, BorderLayout.CENTER);
  64. String[] columnNames = { "数据源beanId", "链接字符串", "用户名", "密码" };
  65. DataSourceConfigList dataSourceConfigList = (DataSourceConfigList)SpringUtil.getSingleBean(DataSourceConfigList.class);
  66. String [][] tableValues= null;
  67. if(dataSourceConfigList != null) {
  68. List<DataSourceConfig> items = dataSourceConfigList.getItems();
  69. tableValues= new String[items.size()][4];
  70. if(items != null) {
  71. for (int row = 0; row < items.size(); row++) { // 获得数据
  72. DataSourceConfig item = items.get(row);
  73. String[] rowValue = { item.getBeanId(), item.getUrl(), item.getUsername(), item.getPassword() };
  74. tableValues[row] = rowValue;
  75. }
  76. }
  77. }
  78. tableModel = new DefaultTableModel(tableValues,columnNames);
  79. JTable table = new JTable(tableModel); // 自定义的表格
  80. table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); // 关闭表格列的自动调整功能。
  81. table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 单选
  82. // table.setSelectionBackground(Color.YELLOW);
  83. // table.setSelectionForeground(Color.RED);
  84. table.setRowHeight(30);
  85. TableColumnModel columnModel = table.getColumnModel();
  86. columnModel.getColumn(0).setPreferredWidth(100);
  87. columnModel.getColumn(1).setPreferredWidth(400);
  88. columnModel.getColumn(2).setPreferredWidth(100);
  89. columnModel.getColumn(3).setPreferredWidth(100);
  90. table.setColumnModel(columnModel);
  91. scrollPane.setViewportView(table); // 支持滚动
  92. add(scrollPane, BorderLayout.CENTER);
  93. // 设置图标
  94. URL path = DataSourceSettingFrame.class.getResource("/prodog_16.png");
  95. Image image;
  96. try {
  97. image = ImageIO.read(path);
  98. this.setIconImage(image);
  99. } catch (IOException e) {
  100. logger.error("读取图片异常。", e);
  101. }
  102. // 激活窗口事件
  103. this.enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  104. // 设置窗体位置和大小
  105. this.setBounds((width - windowsWidth) / 2, (height - windowsHeight) / 2, windowsWidth, windowsHeight);
  106. // 保存按钮
  107. this.saveButton.addActionListener(new ActionListener() {
  108. @Override
  109. public void actionPerformed(ActionEvent e) {
  110. save();
  111. }
  112. });
  113. }
  114. /**
  115. * 保存数据
  116. * 首先更新yml里面的内容,然后更新各个服务中applicationContext.xml里面的数据
  117. */
  118. private void save() {
  119. Vector vector = tableModel.getDataVector();
  120. List<DataSourceConfig> dataSourceConfigs = new ArrayList<DataSourceConfig>();
  121. for(int i = 0; i < vector.size(); i ++) {
  122. DataSourceConfig dataSourceConfig = new DataSourceConfig();
  123. Vector rowData = (Vector)vector.elementAt(i);
  124. dataSourceConfig.setBeanId((String)rowData.elementAt(0));
  125. dataSourceConfig.setUrl((String)rowData.elementAt(1));
  126. dataSourceConfig.setUsername((String)rowData.elementAt(2));
  127. dataSourceConfig.setPassword((String)rowData.elementAt(3));
  128. dataSourceConfigs.add(dataSourceConfig);
  129. }
  130. StringBuilder stringBuilder = new StringBuilder();
  131. stringBuilder.append("您修改了程序管理器的配置,");
  132. // 根据dataSourceConfigs修改yml
  133. // 根据dataSourceConfigs修改各个服务器中applicationContext.xml里面的数据
  134. stringBuilder.append("xxx的配置,");
  135. // 可以参考XmlConfigPathService中的方法
  136. stringBuilder.append("请重新启动本程序。");
  137. // 如果您修改了配置,请重新启动本程序
  138. JOptionPane.showMessageDialog(this, stringBuilder.toString(), "提示:重新启动", JOptionPane.INFORMATION_MESSAGE);
  139. }
  140. }