Newer
Older
stockTray / stock_new / src / me / bell / ConfigGui.java
bdapp on 22 Apr 2019 8 KB stock jar
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);
    }

}