Newer
Older
stockTray / stock_new / src / me / bell / ConfigGui.java
ubt on 25 May 2018 6 KB stock new
package me.bell;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.math.BigDecimal;
import java.util.*;

import javax.swing.*;


public class ConfigGui extends JFrame {
	private static final long serialVersionUID = -6324130816194166022L;

	private List<SettingData> settingList = new ArrayList<>();

	private ConfigurationPanel mPanel;

	private StockBean bean;

	private JSONObject fileJson;
	String fCode = "";
	String fCount = "";
	String fCost = "";
	String fMax = "";
	String fMin = "";


	public ConfigGui(List<SettingData> settingList) {
		// 获取数据
		this.settingList = settingList;

		// 设置窗口属性
		setTitle("Stock Code Config");
		setSize(500, 400);
		setResizable(false);

		mPanel = new ConfigurationPanel();
		add(mPanel, BorderLayout.CENTER);


	}


	/**
	 * 面板配置
	 *
	 */
	class ConfigurationPanel extends JPanel implements ActionListener {

		private static final long serialVersionUID = 1L;
		private final JPanel mainPanel;

		public ConfigurationPanel() {

			// 合并层
			mainPanel = new JPanel();
			BoxLayout mainGrid = new BoxLayout(mainPanel, BoxLayout.Y_AXIS);
			mainPanel.setLayout(mainGrid);
			for (int i=0; i<settingList.size(); i++) {
				mainPanel.add(createPanel(settingList.get(i), i));
			}
			add(mainPanel);

		}


		/**
		 * 创建一行
		 *
		 * @param data
		 * @return
		 */
		public JPanel createPanel(SettingData data, int position){
			JPanel linePanel = new JPanel();
			JTextField nameField = new JTextField(10);
			nameField.setText(data.getCode());
			nameField.addFocusListener(new JTextFieldHintListener("股票代码", nameField));
			JTextField maxField = new JTextField(8);
			maxField.setText(data.getMax().toString());
			maxField.addFocusListener(new JTextFieldHintListener("提示上限", maxField));
			JTextField minField = new JTextField(8);
			minField.setText(data.getMin().toString());
			minField.addFocusListener(new JTextFieldHintListener("提示下限", minField));
			JTextField warnField = new JTextField(8);
			warnField.setText(data.getWarn().toString());
			warnField.addFocusListener(new JTextFieldHintListener("提示涨幅", warnField));

			//添加按钮
			JButton addBtn = new JButton("ADD");
			addBtn.setActionCommand("add");
			addBtn.addActionListener(this);

			//删除按钮
			JButton delBtn = new JButton("DELETE");
			delBtn.setActionCommand("del"+position);
			delBtn.addActionListener(this);

			//保存按钮
			JButton saveBtn = new JButton("SAVE");
			saveBtn.setActionCommand("save");
			saveBtn.addActionListener(this);

			FlowLayout codeLayout = new FlowLayout();
			linePanel.setBackground(Color.decode("#dfdfdf"));
			linePanel.setLayout(codeLayout);
			linePanel.add(nameField);
			linePanel.add(maxField);
			linePanel.add(minField);
			linePanel.add(warnField);
			linePanel.add(addBtn);
			linePanel.add(delBtn);
			linePanel.add(saveBtn);

			return linePanel;
		}

		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println(e.getActionCommand());
			// 按钮响应--新增
			if ("add".equals(e.getActionCommand())) {

				mainPanel.add(createPanel(new SettingData(),settingList.size()+1));
				mainPanel.validate();
				mainPanel.repaint();
				mainPanel.updateUI();

			}

			// 按钮响应--删除
			if (e.getActionCommand().startsWith("del")) {
				String command = e.getActionCommand();
				int position = Integer.parseInt(command.substring(3, command.length()));

				settingList.remove(position);
				mPanel.removeAll();
				mPanel.revalidate();
				mPanel.repaint();

				mPanel = new ConfigurationPanel();
				add(mPanel, BorderLayout.CENTER);
				new ConfigurationPanel();

				showDialog("点SAVE才生效");

			}



			// 按钮响应--保存
			if ("save".equals(e.getActionCommand())) {
				List<SettingData> newSettingList = new ArrayList<>();
				for(int i=0;i<mainPanel.getComponentCount();i++ ){
					Object obj=mainPanel.getComponent(i);
					if(obj instanceof JPanel){
						SettingData data = new SettingData();
						for(int j=0; j<((JPanel) obj).getComponentCount(); j++){
							Object o = ((JPanel) obj).getComponent(j);
							if(o instanceof JTextField){
								String value = ((JTextField) o).getText();
								switch (j){
									case 0:
										if (!validateCode(value)) {
											return;
										} else {
											data.setCode(value);
											break;
										}
									case 1:
										if (value.isEmpty()){
											value = "0";
										}
										data.setMax(new BigDecimal(value));
										break;
									case 2:
										if (value.isEmpty()){
											value = "0";
										}
										data.setMin(new BigDecimal(value));
										break;
									case 3:
										if (value.isEmpty()){
											value = "0";
										}
										data.setWarn(new BigDecimal(value));
										break;
								}

							}

						}

						if (null != data && null != data.getCode()){
								newSettingList.add(data);
						}

					}
				}

				System.out.println(JSON.toJSONString(newSettingList));

				FileUtil.contentToTxt(JSON.toJSONString(newSettingList));

				showDialog("请手动重启程序!!!");

				// 关闭窗口
				dispose();

				System.exit(0);
			}

		}
	}

	/**
	 * 验证代码正确性
	 *
	 * @param value
	 * @return
	 */
	private boolean validateCode(String value) {
		if (value.isEmpty()) {
			showDialog("第一个框不能为空");
			return false;
		} else if (!(value.toLowerCase().startsWith("sz") || value.toLowerCase().startsWith("sh"))){
			showDialog("代码需以SZ、SH开头");
			return false;
		} else if (HttpUtil.verifyCode(value.substring(0, 2)+":"+value.substring(2, value.length()))){
			return true;
		}
		showDialog("代码输入有误");
		return false;
	}

	/**
	 *  弹窗
	 *
	 * @param msg
	 */
	void showDialog(String msg){
		JOptionPane.showMessageDialog(null, msg, "STOCK", JOptionPane.INFORMATION_MESSAGE);
	}

}