|
@@ -0,0 +1,321 @@
|
|
|
+package com.sg.answer.panel;
|
|
|
+
|
|
|
+import com.sg.answer.core.SgEntity;
|
|
|
+import com.sg.answer.core.UserInfoEntity;
|
|
|
+import com.sg.answer.sg.Constant;
|
|
|
+import com.sg.answer.sg.FrameManager;
|
|
|
+import com.sg.answer.entity.JobTypeEntity;
|
|
|
+import com.sg.answer.utils.ObjectUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+
|
|
|
+import javax.swing.*;
|
|
|
+import java.awt.*;
|
|
|
+import java.awt.datatransfer.StringSelection;
|
|
|
+import java.awt.event.*;
|
|
|
+import java.net.MalformedURLException;
|
|
|
+import java.net.URL;
|
|
|
+import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
+
|
|
|
+import static com.sg.answer.sg.API.reset;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author 王玉鹏
|
|
|
+ * @version 1.0
|
|
|
+ * @className PlaceComponents
|
|
|
+ * @description TODO
|
|
|
+ * @date 2020/3/19 13:03
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+public class PlaceComponents {
|
|
|
+
|
|
|
+
|
|
|
+ private AtomicBoolean status = new AtomicBoolean(true);
|
|
|
+
|
|
|
+ protected AtomicBoolean pause = new AtomicBoolean(false);
|
|
|
+
|
|
|
+ private static final Object lock = new Object();
|
|
|
+
|
|
|
+ public JPanel placeComponents() {
|
|
|
+ JPanel panel = new JPanel();
|
|
|
+ panel.setLayout(null);
|
|
|
+
|
|
|
+ // 创建 当前关卡JLabel
|
|
|
+ JLabel gkLabel = new JLabel("当前关卡:");
|
|
|
+ gkLabel.setBounds(10,10,80,25);
|
|
|
+ panel.add(gkLabel);
|
|
|
+ SgEntity sgEntity = new SgEntity();
|
|
|
+ sgEntity.getGkText().setForeground(Color.RED);
|
|
|
+ sgEntity.getGkText().setBounds(100,10,165,25);
|
|
|
+ panel.add(sgEntity.getGkText());
|
|
|
+
|
|
|
+ // 创建 JLabel
|
|
|
+ JLabel userLabel = new JLabel("用户:");
|
|
|
+ /* 这个方法定义了组件的位置。
|
|
|
+ * setBounds(x, y, width, height)
|
|
|
+ * x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。
|
|
|
+ */
|
|
|
+ userLabel.setBounds(10,40,80,25);
|
|
|
+ panel.add(userLabel);
|
|
|
+
|
|
|
+ sgEntity.getUserText().setBounds(100,40,165,25);
|
|
|
+ panel.add( sgEntity.getUserText());
|
|
|
+
|
|
|
+ // 输入密码的文本域
|
|
|
+ JLabel passwordLabel = new JLabel("密码:");
|
|
|
+ passwordLabel.setBounds(10,70,80,25);
|
|
|
+ panel.add(passwordLabel);
|
|
|
+
|
|
|
+ sgEntity.getPasswordText().setBounds(100,70,165,25);
|
|
|
+ panel.add(sgEntity.getPasswordText());
|
|
|
+
|
|
|
+ // 工种的文本域
|
|
|
+ JLabel gzLabel = new JLabel("工种:");
|
|
|
+ gzLabel.setBounds(10,100,80,25);
|
|
|
+ panel.add(gzLabel);
|
|
|
+
|
|
|
+ JComboBox comboBox=new JComboBox();
|
|
|
+ for (JobTypeEntity jobTypeEntity : Constant.jobTypeList) {
|
|
|
+ comboBox.addItem(jobTypeEntity);
|
|
|
+ }
|
|
|
+/* for (String JobTypeName:Constant.jobTypeId.keySet()) {
|
|
|
+ comboBox.addItem(JobTypeName);
|
|
|
+ }*/
|
|
|
+ sgEntity.setComboBox(comboBox);
|
|
|
+ comboBox.setBounds(100,100,165,25);
|
|
|
+ panel.add(comboBox);
|
|
|
+
|
|
|
+ //难度
|
|
|
+ JLabel typeLabel = new JLabel("难度选择:");
|
|
|
+ typeLabel.setBounds(10,130,80,25);
|
|
|
+ panel.add(typeLabel);
|
|
|
+
|
|
|
+ JComboBox typeBox=new JComboBox();
|
|
|
+ for (String name : Constant.level.keySet()) {
|
|
|
+ typeBox.addItem(name);
|
|
|
+ }
|
|
|
+ typeBox.setBounds(100,130,165,25);
|
|
|
+ sgEntity.setTypeBox(typeBox);
|
|
|
+ panel.add(typeBox);
|
|
|
+
|
|
|
+ //统计
|
|
|
+ JLabel xjLabel = new JLabel("当前刷分小计:");
|
|
|
+ xjLabel.setBounds(320,10,100,25);
|
|
|
+ panel.add(xjLabel);
|
|
|
+
|
|
|
+ sgEntity.getXjText().setBounds(410,10,50,25);
|
|
|
+ sgEntity.getXjText().setForeground(Color.green);
|
|
|
+ panel.add(sgEntity.getXjText());
|
|
|
+
|
|
|
+
|
|
|
+ //目标显示
|
|
|
+ JLabel mbLabel = new JLabel("目标:");
|
|
|
+ mbLabel.setBounds(460,10,100,25);
|
|
|
+ panel.add(mbLabel);
|
|
|
+
|
|
|
+ sgEntity.getMbText().setBounds(500,10,50,25);
|
|
|
+ sgEntity.getMbText().setForeground(Color.red);
|
|
|
+ panel.add(sgEntity.getMbText());
|
|
|
+
|
|
|
+ //倒计时
|
|
|
+ sgEntity.getTimeLabel().setForeground(Color.MAGENTA);
|
|
|
+ sgEntity.getTimeLabel().setBounds(530,10,150,20);
|
|
|
+ panel.add(sgEntity.getTimeLabel());
|
|
|
+
|
|
|
+ // 自定义刷分
|
|
|
+
|
|
|
+ //目标显示
|
|
|
+ JLabel zdyLabel = new JLabel("自定义刷分:");
|
|
|
+ zdyLabel.setBounds(10,160,100,25);
|
|
|
+ panel.add(zdyLabel);
|
|
|
+
|
|
|
+ sgEntity.getCoustomText().setBounds(100,160,100,25);
|
|
|
+ panel.add( sgEntity.getCoustomText());
|
|
|
+
|
|
|
+ JButton coustomButton = new JButton("刷分");
|
|
|
+ coustomButton.setBounds(210, 160, 55, 25);
|
|
|
+ panel.add(coustomButton);
|
|
|
+
|
|
|
+ // 创建登录按钮
|
|
|
+ JButton loginButton = new JButton("登陆答题");
|
|
|
+ loginButton.setBounds(10, 190, 110, 25);
|
|
|
+ panel.add(loginButton);
|
|
|
+
|
|
|
+ // 创建停止按钮
|
|
|
+ JButton stopButton = new JButton("结束刷题");
|
|
|
+ stopButton.setBounds(160, 190, 110, 25);
|
|
|
+ panel.add(stopButton);
|
|
|
+
|
|
|
+ //日志
|
|
|
+ sgEntity.getTextArea().setBounds(10, 260, 770, 150);
|
|
|
+ // 设置自动换行
|
|
|
+ sgEntity.getTextArea().setLineWrap(true);
|
|
|
+ // 添加到内容面板
|
|
|
+ sgEntity.getTextArea().setText("日志");
|
|
|
+ sgEntity.getTextArea().setForeground(Color.green);
|
|
|
+ sgEntity.getTextArea().setBackground(Color.black);
|
|
|
+ sgEntity.getTextArea().setFocusable(false);
|
|
|
+ panel.add( sgEntity.getTextArea());
|
|
|
+ //日志滚动面板
|
|
|
+ JScrollPane scrollpane=new JScrollPane();
|
|
|
+ scrollpane.setBounds(10, 260, 700, 180);
|
|
|
+ scrollpane.setViewportView( sgEntity.getTextArea());
|
|
|
+ panel.add(scrollpane);
|
|
|
+
|
|
|
+ // tip
|
|
|
+ JLabel bqLabel = new JLabel("本软件由彭宇制作,如有疑问请加微信:pengyu20100613联系本人");
|
|
|
+ bqLabel.setForeground(Color.RED);
|
|
|
+ bqLabel.setBounds(10,420,400,20);
|
|
|
+ panel.add(bqLabel);
|
|
|
+
|
|
|
+ /*******************************个人信息面板*********************************/
|
|
|
+
|
|
|
+ UserInfoEntity userInfoEntity = new UserInfoEntity();
|
|
|
+
|
|
|
+ // 姓名
|
|
|
+ JLabel userName = new JLabel("姓名:");
|
|
|
+ userName.setBounds(320,40,80,25);
|
|
|
+ panel.add(userName);
|
|
|
+
|
|
|
+ userInfoEntity.setUserNameData( new JLabel());
|
|
|
+ userInfoEntity.getUserNameData().setBounds(360,40,80,25);
|
|
|
+ userInfoEntity.getUserNameData().setForeground(Color.blue);
|
|
|
+
|
|
|
+ userInfoEntity.getUserNameData().addMouseListener(new MouseAdapter() {
|
|
|
+ @Override
|
|
|
+ public void mouseClicked(MouseEvent e){
|
|
|
+ if (e.getButton() == MouseEvent.BUTTON3){
|
|
|
+ StringSelection selection = new StringSelection(userInfoEntity.getUserNameData().getText());
|
|
|
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, selection);
|
|
|
+ JOptionPane.showMessageDialog(panel, "姓名已复制到剪贴板了" ," tip", JOptionPane.WARNING_MESSAGE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ panel.add( userInfoEntity.getUserNameData());
|
|
|
+
|
|
|
+
|
|
|
+ // 工号
|
|
|
+ JLabel jobNo = new JLabel("工号:");
|
|
|
+ jobNo.setBounds(320,75,80,25);
|
|
|
+ panel.add(jobNo);
|
|
|
+
|
|
|
+ userInfoEntity.getJobNoData().setBounds(360,75,80,25);
|
|
|
+ userInfoEntity.getJobNoData().setForeground(Color.blue);
|
|
|
+ panel.add(userInfoEntity.getJobNoData());
|
|
|
+
|
|
|
+ // 工种
|
|
|
+ JLabel jobType = new JLabel("工种:");
|
|
|
+ jobType.setBounds(320,105,80,25);
|
|
|
+ panel.add(jobType);
|
|
|
+
|
|
|
+ userInfoEntity.getJobTypeData().setBounds(360,105,80,25);
|
|
|
+ userInfoEntity.getJobTypeData().setForeground(Color.blue);
|
|
|
+ panel.add(userInfoEntity.getJobTypeData());
|
|
|
+
|
|
|
+ // 积分
|
|
|
+ JLabel integral = new JLabel("总积分:");
|
|
|
+ integral.setBounds(30,220,80,25);
|
|
|
+ integral.setFont(new Font (Font.DIALOG, Font.BOLD, 15));
|
|
|
+ integral.setForeground(Color.BLUE);
|
|
|
+ panel.add(integral);
|
|
|
+
|
|
|
+ userInfoEntity.getIntegralDate().setBounds(100,220,80,25);
|
|
|
+ userInfoEntity.getIntegralDate().setFont(new Font (Font.DIALOG, Font.BOLD, 15));
|
|
|
+ userInfoEntity.getIntegralDate().setForeground(Color.red);
|
|
|
+ panel.add(userInfoEntity.getIntegralDate());
|
|
|
+
|
|
|
+
|
|
|
+ // 金币
|
|
|
+ JLabel goldCoin = new JLabel("金币:");
|
|
|
+ goldCoin.setBounds(320,135,80,25);
|
|
|
+ panel.add(goldCoin);
|
|
|
+
|
|
|
+ userInfoEntity.getGoldCoinData().setBounds(360,135,80,25);
|
|
|
+ userInfoEntity.getGoldCoinData().setForeground(Color.blue);
|
|
|
+ panel.add(userInfoEntity.getGoldCoinData());
|
|
|
+
|
|
|
+
|
|
|
+ // 钻石
|
|
|
+ JLabel diamond = new JLabel("钻石:");
|
|
|
+ diamond.setBounds(320,165,80,25);
|
|
|
+ panel.add(diamond);
|
|
|
+
|
|
|
+ // 暂停
|
|
|
+ JButton parseButton = new JButton("暂停答题");
|
|
|
+ parseButton.setBounds(350, 190, 80, 25);
|
|
|
+ panel.add(parseButton);
|
|
|
+
|
|
|
+ userInfoEntity.getDiamondData().setBounds(360,165,80,25);
|
|
|
+ userInfoEntity.getDiamondData().setForeground(Color.blue);
|
|
|
+ panel.add( userInfoEntity.getDiamondData());
|
|
|
+
|
|
|
+ JLabel initLabel = new JLabel("本次答题初始分数:");
|
|
|
+ initLabel.setBounds(200,220,140,25);
|
|
|
+ initLabel.setFont(new Font (Font.DIALOG, Font.BOLD, 15));
|
|
|
+ initLabel.setForeground(Color.BLUE);
|
|
|
+ panel.add(initLabel);
|
|
|
+
|
|
|
+ JLabel statrScore = new JLabel("0");
|
|
|
+ statrScore.setBounds(355,220,80,25);
|
|
|
+ statrScore.setFont(new Font (Font.DIALOG, Font.BOLD, 15));
|
|
|
+ statrScore.setForeground(Color.red);
|
|
|
+ panel.add(statrScore);
|
|
|
+
|
|
|
+
|
|
|
+ // 头像
|
|
|
+ try {
|
|
|
+ URL url= new URL("http://pic1.win4000.com/pic/9/75/1a9b924550.jpg");
|
|
|
+ ImageIcon imageIcon = new ImageIcon(url);
|
|
|
+ imageIcon.setImage(imageIcon.getImage().getScaledInstance(195,290,Image.SCALE_DEFAULT));
|
|
|
+ sgEntity.setImage(new JLabel(imageIcon));
|
|
|
+ sgEntity.getImage().setBounds(480,30,200,300);
|
|
|
+ panel.add(sgEntity.getImage());
|
|
|
+ } catch (MalformedURLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //自定义监听时间
|
|
|
+ coustomButton.addActionListener(e -> {
|
|
|
+ if (StringUtils.isEmpty(sgEntity.getCoustomText().getText()) || !ObjectUtils.isNumeric(sgEntity.getCoustomText().getText())) {
|
|
|
+ JOptionPane.showMessageDialog(panel, "请输入正确得分数", " stop", JOptionPane.ERROR_MESSAGE);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ sgEntity.setCoustomScore(Double.parseDouble(sgEntity.getCoustomText().getText()));
|
|
|
+ sgEntity.getMbText().setText(sgEntity.getCoustomText().getText());
|
|
|
+ });
|
|
|
+ //结束答题时间
|
|
|
+ stopButton.addActionListener(e -> {
|
|
|
+ status.set(false);
|
|
|
+ JOptionPane.showMessageDialog(panel, "本次答题已结束,如需要重写开始请继续" ," stop", JOptionPane.ERROR_MESSAGE);
|
|
|
+ reset(loginButton,sgEntity,"已结束本次答题");
|
|
|
+ });
|
|
|
+ //登录时间
|
|
|
+ loginButton.addActionListener((ActionEvent e) -> {
|
|
|
+ status.set(true);
|
|
|
+ try {
|
|
|
+ new FrameManager().start(loginButton,sgEntity,userInfoEntity,statrScore,status,pause,lock);
|
|
|
+ } catch (Exception e1) {
|
|
|
+ e1.printStackTrace();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ parseButton.addActionListener(e ->{
|
|
|
+ loginButton.setEnabled(false);
|
|
|
+ parseButton.setText(parseButton.getText().equals("暂停答题")?"继续答题":"暂停答题");
|
|
|
+ pause.set(!pause.get());
|
|
|
+
|
|
|
+ if (!pause.get()){
|
|
|
+ synchronized (lock){
|
|
|
+ sgEntity.apppendLogs(" 已恢复当前答题 ");
|
|
|
+ log.info("以恢复当前等待线程,开始继续答题");
|
|
|
+ lock.notify();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ return panel;
|
|
|
+
|
|
|
+ }
|
|
|
+}
|