diff --git a/src/backend/dao/impl/QuestionsDao.java b/src/backend/dao/impl/QuestionsDao.java index 562efc6..ad0ccad 100644 --- a/src/backend/dao/impl/QuestionsDao.java +++ b/src/backend/dao/impl/QuestionsDao.java @@ -82,7 +82,10 @@ public class QuestionsDao { stmt.setString(1, question.getName()); stmt.setString(2, question.getDescription()); stmt.setString(3, question.getAnswer()); - stmt.setInt(4, question.getFrequency()); + if(question.getFrequency()==null) + stmt.setInt(4, 0); + else + stmt.setInt(4, question.getFrequency()); row = stmt.executeUpdate(); stmt.close(); @@ -114,20 +117,23 @@ public class QuestionsDao { } return row > 0; } - public boolean updata(Questions question){ + public boolean update(Questions question){ int row = 0; //1. 从连接池中拿到连接 Connection conn = DBConnectionPool.getConnection(); if(conn==null) return false; //2. 创建Statement对象 - String sql = "updata questions set name = ?,description = ?,answer = ?,frequency=? where id = ?"; + String sql = "update questions set name = ?,description = ?,answer = ?,frequency=? where id = ?"; try{ PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, question.getName()); stmt.setString(2, question.getDescription()); stmt.setString(3, question.getAnswer()); - stmt.setInt(4, question.getFrequency()); + if(question.getFrequency()==null) + stmt.setInt(4, 0); + else + stmt.setInt(4, question.getFrequency()); stmt.setInt(5, question.getId()); row = stmt.executeUpdate(); stmt.close(); diff --git a/src/backend/model/Questions.java b/src/backend/model/Questions.java index 94fec73..ce496ca 100644 --- a/src/backend/model/Questions.java +++ b/src/backend/model/Questions.java @@ -5,7 +5,7 @@ public class Questions { private String name; private String description; private String answer; - private int frequency; + private Integer frequency; public int getId() { return id; @@ -39,11 +39,11 @@ public class Questions { this.answer = answer; } - public int getFrequency() { + public Integer getFrequency() { return frequency; } - public void setFrequency(int frequency) { + public void setFrequency(Integer frequency) { this.frequency = frequency; } } diff --git a/src/backend/model/enums/GlobalData.java b/src/backend/model/enums/GlobalData.java index 73369c1..10d250b 100644 --- a/src/backend/model/enums/GlobalData.java +++ b/src/backend/model/enums/GlobalData.java @@ -4,8 +4,16 @@ import java.util.*; public class GlobalData { public static final Map FREQUENCY_MAP = new HashMap<>(); static{ + FREQUENCY_MAP.put(0,"未指定"); FREQUENCY_MAP.put(1,"低频"); FREQUENCY_MAP.put(2,"中频"); FREQUENCY_MAP.put(3,"高频"); } + public static Integer getFrequencyByValue(String value){ + for(Map.Entry entry:FREQUENCY_MAP.entrySet()) { + if (entry.getValue().equals(value)) + return entry.getKey(); + } + return 0; + } } diff --git a/src/backend/service/impl/QuestionsService.java b/src/backend/service/impl/QuestionsService.java index 64e50dd..09a35ef 100644 --- a/src/backend/service/impl/QuestionsService.java +++ b/src/backend/service/impl/QuestionsService.java @@ -45,4 +45,7 @@ public class QuestionsService { public void delete(Integer id){ questionsDao.delete(id); } + public boolean update(Questions question){ + return questionsDao.update(question); + } } diff --git a/src/view/EditQuestionDialog.java b/src/view/EditQuestionDialog.java new file mode 100644 index 0000000..5e57785 --- /dev/null +++ b/src/view/EditQuestionDialog.java @@ -0,0 +1,109 @@ +package view; + +import backend.model.Questions; +import backend.service.impl.QuestionsService; + +import javax.swing.*; +import java.awt.*; + +public class EditQuestionDialog extends JDialog{ + private JTextField nameTextField; + private JTextField descriptionTextField; + private JTextField answerTextField; + private JComboBox frequencyCombobox; + private JButton saveButton; + private JButton cancelButton; + private int type; + private Questions question; + private QuestionsService questionsService = new QuestionsService(); + + public EditQuestionDialog(int type, Questions question) { + this.type = type; + this.question = question; + initView(); + } + + public void initListener(){ + saveButton.addActionListener(e->{ + String name = nameTextField.getText().trim(); + String description = descriptionTextField.getText().trim(); + String answer = answerTextField.getText().trim(); + if(name.equals("")|| description.equals("")|| answer.equals("")) { + JOptionPane.showMessageDialog(this, "请填写完整!"); + return; + } + Questions questionsPo = new Questions(); + questionsPo.setName(name); + questionsPo.setDescription(description); + questionsPo.setAnswer(answer); + Integer index=frequencyCombobox.getSelectedIndex(); + questionsPo.setFrequency(index==0 ? null:index); + String message; + boolean res; + if(type==0) { + res = questionsService.insert(questionsPo); + message = "添加"; + } + else{ + questionsPo.setId(question.getId()); + res = questionsService.update(questionsPo); + message = "修改"; + } + if(res) + dispose(); + else + JOptionPane.showMessageDialog(this, message+"失败"); + }); + cancelButton.addActionListener(e->{ + dispose(); + }); + } + private void initView(){ + setSize(400,300); + setLocationRelativeTo(null);//居中 + add(initPanel()); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + setModal(true);//设置模态 + if(type==0) + setTitle("添加单词"); + else{ + setTitle("修改单词"); + nameTextField.setText(question.getName()); + descriptionTextField.setText(question.getDescription()); + answerTextField.setText(question.getAnswer()); + frequencyCombobox.setSelectedIndex(question.getFrequency() == null? 0:question.getFrequency()); + } + //细节:要先初始化监听器,再初始化界面 + //初始化监听器 + initListener(); + //显示界面 + setVisible(true); + } + private JPanel initPanel(){ + JPanel mainPanel = new JPanel(); + mainPanel.setLayout(new GridLayout(5,2)); + //第一行 单词 + mainPanel.add(new JLabel("单词")); + nameTextField = new JTextField(); + mainPanel.add(nameTextField); + //第二行 定义 + mainPanel.add(new JLabel("定义")); + descriptionTextField = new JTextField(); + mainPanel.add(descriptionTextField); + //第三行 例句 + mainPanel.add(new JLabel("例句")); + answerTextField = new JTextField(); + mainPanel.add(answerTextField); + //第四行 频率 + mainPanel.add(new JLabel("频率")); + frequencyCombobox = new JComboBox<>(new String[]{"未指定","低频","中频","高频"}); + mainPanel.add(frequencyCombobox); + //第五行 按钮 + saveButton = new JButton("保存"); + cancelButton = new JButton("取消"); + mainPanel.add(saveButton); + mainPanel.add(cancelButton); + return mainPanel; + } + +} diff --git a/src/view/QuestionsPanel.java b/src/view/QuestionsPanel.java index 950f52a..03289f6 100644 --- a/src/view/QuestionsPanel.java +++ b/src/view/QuestionsPanel.java @@ -2,9 +2,13 @@ package view; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.Vector; +import backend.model.Questions; import backend.service.impl.QuestionsService; +import backend.model.enums.GlobalData; public class QuestionsPanel extends JPanel{ private QuestionsService questionsService = new QuestionsService(); @@ -30,7 +34,7 @@ public class QuestionsPanel extends JPanel{ } public void initListener(){ queryButton.addActionListener(e->{ - int frequency = frequencyComboBox.getSelectedIndex()==0?null:frequencyComboBox.getSelectedIndex(); + Integer frequency = frequencyComboBox.getSelectedIndex()==0?null:frequencyComboBox.getSelectedIndex(); String key = keyTextField.getText(); //清楚已有数据 model.setRowCount(0); @@ -51,6 +55,44 @@ public class QuestionsPanel extends JPanel{ } } }); + //添加事件:打开对话框 + addButton.addActionListener(e->{ + new EditQuestionDialog(0,null); + }); + editButton.addActionListener(e->{ + int row = table.getSelectedRow(); + if(row>=0) + openEditDialog(row); + + }); + //双击某行弹出修改对话框 + table.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if(e.getClickCount()==2){ + int row = table.getSelectedRow(); + openEditDialog(row); + } + } + }); + } + + private void openEditDialog(int row){ + Vector data = tableData.get(row); + Questions questions = new Questions(); + questions.setId(Integer.parseInt(data.get(0))); + questions.setName(data.get(1)); + questions.setDescription(data.get(2)); + questions.setAnswer(data.get(3)); + questions.setFrequency(GlobalData.getFrequencyByValue(data.get(4))); + new EditQuestionDialog(1, questions); + //修改成功后刷新并定位修改位置 + tableData = questionsService.getAll(); + refreshData(); + table.setRowSelectionInterval(row,row); + scrollPane.getVerticalScrollBar().setValue(row*table.getRowHeight()); + scrollPane.getHorizontalScrollBar().setValue(0); + scrollPane.revalidate(); } public QuestionsPanel(){ initView();