步骤 1 : CategoryService 步骤 2 : CategoryTableModel 步骤 3 : CategoryPanel 步骤 4 : CategoryListener 步骤 5 : 在CategoryPanel中加上监听器 步骤 6 : 运行效果
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package service;
import java.util.Collections;
import java.util.List;
import dao.CategoryDAO;
import dao.RecordDAO;
import entity.Category;
import entity.Record;
public class CategoryService {
CategoryDAO categoryDao = new CategoryDAO();
RecordDAO recordDao = new RecordDAO();
public List<Category> list() {
List<Category> cs= categoryDao.list();
for (Category c : cs) {
List<Record> rs =recordDao.list(c.id);
c.recordNumber=rs.size();
}
Collections.sort(cs,(c1,c2)->c2.recordNumber-c1.recordNumber);
return cs;
}
public void add(String name) {
Category c = new Category();
c.setName(name);
categoryDao.add(c);
}
public void update(int id, String name) {
Category c = new Category();
c.setName(name);
c.setId(id);
categoryDao.update(c);
}
public void delete(int id) {
categoryDao.delete(id);
}
}
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package gui.model;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import entity.Category;
import service.CategoryService;
public class CategoryTableModel extends AbstractTableModel {
String[] columnNames = new String[] { "分类名称", "消费次数"};
// 使用从Service返回的List作为TableModel的数据
public List<Category> cs = new CategoryService().list();
public int getRowCount() {
return cs.size();
}
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int columnIndex) {
return columnNames[columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
// 先通过cs.get(rowIndex)获取行对应的Category对象
// 然后根据columnIndex返回对应的属性
public Object getValueAt(int rowIndex, int columnIndex) {
Category h = cs.get(rowIndex);
if (0 == columnIndex)
return h.name;
if (1 == columnIndex)
return h.recordNumber;
return null;
}
}
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package gui.panel;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import entity.Category;
import gui.model.CategoryTableModel;
import service.CategoryService;
import util.ColorUtil;
import util.GUIUtil;
public class CategoryPanel extends JPanel {
static {
GUIUtil.useLNF();
}
public static CategoryPanel instance = new CategoryPanel();
public JButton bAdd = new JButton("新增");
public JButton bEdit = new JButton("编辑");
public JButton bDelete = new JButton("删除");
String columNames[] = new String[] { "分类名称", "消费次数" };
public CategoryTableModel ctm = new CategoryTableModel();
public JTable t = new JTable(ctm);
public CategoryPanel() {
GUIUtil.setColor(ColorUtil.blueColor, bAdd, bEdit, bDelete);
JScrollPane sp = new JScrollPane(t);
JPanel pSubmit = new JPanel();
pSubmit.add(bAdd);
pSubmit.add(bEdit);
pSubmit.add(bDelete);
this.setLayout(new BorderLayout());
this.add(sp, BorderLayout.CENTER);
this.add(pSubmit, BorderLayout.SOUTH);
}
public static void main(String[] args) {
GUIUtil.showPanel(CategoryPanel.instance);
}
public Category getSelectedCategory() {
int index = t.getSelectedRow();
return ctm.cs.get(index);
}
public void updateData() {
ctm.cs = new CategoryService().list();
t.updateUI();
t.getSelectionModel().setSelectionInterval(0, 0);
if(0==ctm.cs.size()){
bEdit.setEnabled(false);
bDelete.setEnabled(false);
}
else{
bEdit.setEnabled(true);
bDelete.setEnabled(true);
}
}
}
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package gui.listener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import entity.Category;
import gui.panel.CategoryPanel;
import service.CategoryService;
public class CategoryListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
CategoryPanel p = CategoryPanel.instance;
JButton b = (JButton) e.getSource();
if (b == p.bAdd) {
String name = JOptionPane.showInputDialog(null);
if (0 == name.length()) {
JOptionPane.showMessageDialog(p, "分类名称不能为空");
return;
}
new CategoryService().add(name);
}
if (b == p.bEdit) {
Category c = p.getSelectedCategory();
int id = c.id;
String name = JOptionPane.showInputDialog("修改分类名称", c.name);
if (0 == name.length()) {
JOptionPane.showMessageDialog(p, "分类名称不能为空");
return;
}
new CategoryService().update(id, name);
}
if (b == p.bDelete) {
Category c = p.getSelectedCategory();
if (0 != c.recordNumber) {
JOptionPane.showMessageDialog(p, "本分类下有消费记录存在,不能删除");
return;
}
if (JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(p, "确认要删除?"))
return;
int id = c.id;
new CategoryService().delete(id);
}
p.updateData();
}
}
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package gui.panel;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import entity.Category;
import gui.listener.CategoryListener;
import gui.model.CategoryTableModel;
import service.CategoryService;
import util.ColorUtil;
import util.GUIUtil;
public class CategoryPanel extends JPanel {
static {
GUIUtil.useLNF();
}
public static CategoryPanel instance = new CategoryPanel();
public JButton bAdd = new JButton("新增");
public JButton bEdit = new JButton("编辑");
public JButton bDelete = new JButton("删除");
String columNames[] = new String[] { "分类名称", "消费次数" };
public CategoryTableModel ctm = new CategoryTableModel();
public JTable t = new JTable(ctm);
public CategoryPanel() {
GUIUtil.setColor(ColorUtil.blueColor, bAdd, bEdit, bDelete);
JScrollPane sp = new JScrollPane(t);
JPanel pSubmit = new JPanel();
pSubmit.add(bAdd);
pSubmit.add(bEdit);
pSubmit.add(bDelete);
this.setLayout(new BorderLayout());
this.add(sp, BorderLayout.CENTER);
this.add(pSubmit, BorderLayout.SOUTH);
addListener();
}
public static void main(String[] args) {
GUIUtil.showPanel(CategoryPanel.instance);
}
public Category getSelectedCategory() {
int index = t.getSelectedRow();
return ctm.cs.get(index);
}
public void updateData() {
ctm.cs = new CategoryService().list();
t.updateUI();
t.getSelectionModel().setSelectionInterval(0, 0);
if(0==ctm.cs.size()){
bEdit.setEnabled(false);
bDelete.setEnabled(false);
}
else{
bEdit.setEnabled(true);
bDelete.setEnabled(true);
}
}
public void addListener() {
CategoryListener listener = new CategoryListener();
bAdd.addActionListener(listener);
bEdit.addActionListener(listener);
bDelete.addActionListener(listener);
}
}
增值内容,请先登录
完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2022-01-09
CategoryTableModel 由 implement TableModel改成现在代码上的"extends AbstractTableModle"
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2021-04-26
当记录过多时,CategoryService.list()使用record来获取recordNumer创建对象过多,不如通过sql语句直接获取到recordNumber
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2021-04-05
建议在CategoryListener类中增加一行name是否是null的判断
2020-12-21
抛了个数组下标越界的异常
2020-11-17
关于新增分类时无法正常显示中文
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 22 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|