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);
}
}