步骤 1 : RecordService 步骤 2 : CategoryComboBoxModel 步骤 3 : RecordListener 步骤 4 : RecordPanel 步骤 5 : 点击效果 
				
					
						增值内容,请先登录
					
				
				 
		
					
		
		
					
					完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
					 
			增值内容,点击购买 
					使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
					 
					
				package service;
import java.util.Date;
import dao.RecordDAO;
import entity.Category;
import entity.Record;
public class RecordService {
	RecordDAO recordDao = new RecordDAO();
	public void add(int spend, Category c, String comment,Date date){
		Record r = new Record();
		r.spend = spend;
		r.cid = c.id;
		r.comment = comment;
		r.date = date;
		recordDao.add(r);
	}
}
 
									
								package service;
import java.util.Date;
import dao.RecordDAO;
import entity.Category;
import entity.Record;
public class RecordService {
	RecordDAO recordDao = new RecordDAO();
	public void add(int spend, Category c, String comment,Date date){
		Record r = new Record();
		r.spend = spend;
		r.cid = c.id;
		r.comment = comment;
		r.date = date;
		recordDao.add(r);
	}
}
								
								
				
					
						增值内容,请先登录
					
				
				 
		
					
		
		
					
					完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
					 
			增值内容,点击购买 
					使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
					 
					
				package gui.model;
import java.util.List;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataListener;
import entity.Category;
import service.CategoryService;
public class CategoryComboBoxModel implements ComboBoxModel<Category>{
	public List<Category> cs = new CategoryService().list();
	
	public Category c;
	
	public CategoryComboBoxModel(){
		if(!cs.isEmpty())
			c=cs.get(0);
	}
	
	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		
		return cs.size();
	}
	@Override
	public Category getElementAt(int index) {
		// TODO Auto-generated method stub
		return cs.get(index);
	}
	@Override
	public void addListDataListener(ListDataListener l) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void removeListDataListener(ListDataListener l) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void setSelectedItem(Object anItem) {
		c = (Category) anItem;
	}
	@Override
	public Object getSelectedItem() {
		if(!cs.isEmpty())
			return c;
		else
			return null;
	}
}
 
								
										
									
								
							
				
					
						增值内容,请先登录
					
				
				 
		
					
		
		
					
					完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
					 
			增值内容,点击购买 
					使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
					 
					
				package gui.listener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JOptionPane;
import entity.Category;
import gui.panel.CategoryPanel;
import gui.panel.MainPanel;
import gui.panel.RecordPanel;
import gui.panel.SpendPanel;
import service.RecordService;
import util.GUIUtil;
public class RecordListener implements ActionListener {
	@Override
	public void actionPerformed(ActionEvent e) {
		RecordPanel p  =RecordPanel.instance;
		if(0==p.cbModel.cs.size()){
			JOptionPane.showMessageDialog(p, "暂无消费分类,无法添加,请先增加消费分类");
			MainPanel.instance.workingPanel.show(CategoryPanel.instance);
			return;
		}
		
		if(!GUIUtil.checkZero(p.tfSpend,"花费金额"))
			return;
		int spend = Integer.parseInt(p.tfSpend.getText());
		Category c = p.getSelectedCategory();
		String comment = p.tfComment.getText();
		Date d = p.datepick.getDate();
		new RecordService().add(spend, c, comment, d);
		JOptionPane.showMessageDialog(p, "添加成功");
		
		MainPanel.instance.workingPanel.show(SpendPanel.instance);
		
	}
}
 
								
										
									
								
							
				
					
						增值内容,请先登录
					
				
				 
		
					
		
		
					
					完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
					 
			增值内容,点击购买 
					使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
					 
					
				package gui.panel;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jdesktop.swingx.JXDatePicker;
import entity.Category;
import gui.listener.RecordListener;
import gui.model.CategoryComboBoxModel;
import service.CategoryService;
import util.ColorUtil;
import util.GUIUtil;
public class RecordPanel extends WorkingPanel {
	static{
		GUIUtil.useLNF();
	}
	public static RecordPanel instance = new RecordPanel();
	JLabel lSpend = new JLabel("花费(¥)");
	JLabel lCategory = new JLabel("分类");
	JLabel lComment = new JLabel("备注");
	JLabel lDate = new JLabel("日期");
	public JTextField tfSpend = new JTextField("0");
	public CategoryComboBoxModel cbModel = new CategoryComboBoxModel();
	public JComboBox<Category> cbCategory = new JComboBox<>(cbModel);
	public JTextField tfComment = new JTextField();
	public JXDatePicker datepick = new JXDatePicker(new Date());
	
	JButton bSubmit = new JButton("记一笔");
	public RecordPanel() {
		GUIUtil.setColor(ColorUtil.grayColor, lSpend,lCategory,lComment,lDate);
		GUIUtil.setColor(ColorUtil.blueColor, bSubmit);
		JPanel pInput =new JPanel();
		JPanel pSubmit = new JPanel();
		int gap = 40;
		pInput.setLayout(new GridLayout(4,2,gap,gap));
		
		pInput.add(lSpend);
		pInput.add(tfSpend);
		pInput.add(lCategory);
		pInput.add(cbCategory);
		pInput.add(lComment);
		pInput.add(tfComment);
		pInput.add(lDate);
		pInput.add(datepick);
		
		pSubmit.add(bSubmit);
		
		this.setLayout(new BorderLayout());
		this.add(pInput,BorderLayout.NORTH);
		this.add(pSubmit,BorderLayout.CENTER);
		
		addListener();
	}
	public static void main(String[] args) {
		GUIUtil.showPanel(RecordPanel.instance);
	}
	public Category getSelectedCategory(){
		return (Category) cbCategory.getSelectedItem();
	}
	@Override
	public void updateData() {
		cbModel.cs = new CategoryService().list();
		cbCategory.updateUI();
		resetInput();
		tfSpend.grabFocus();
	}
	
	public void resetInput(){
		tfSpend.setText("0");
		tfComment.setText("");
		if(0!=cbModel.cs.size())
			cbCategory.setSelectedIndex(0);
		datepick.setDate(new Date());
	}	
	@Override
	public void addListener() {
		// TODO Auto-generated method stub
		RecordListener listener = new RecordListener();
		bSubmit.addActionListener(listener);
	}
}
 
								
										
									
								
							
				
					
						增值内容,请先登录
					
				
				 
		
					
		
		
					
					完整的J2SE桌面项目,从无到有完整的开发流程,涵盖全部52个知识点,154个开发步骤, 一共36个讲解视频,累计时长3小时10分59秒,大小1.94G,充实J2SE项目经验,为简历加上一个有吸引力的砝码
					 
			增值内容,点击购买 
					使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
					 
					
				
				HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
			 
			 
			
			
			
			
			
		
		
		
		 	问答区域     
		 	
				
		  
	 
	  		
	  
	  	2022-07-12
	  		
	  				
	  					 
	  
					
						这里的逻辑有点绕,能解释一下吗 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  
 
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2021-01-15
	  		
	  				
	  					 
	  
					
						Record Panel 运行时的问题 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  
 
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2020-01-16
	  		
	  				
	  					 
	  
					
						在编写RecordListener类的时候发现的问题 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  	    
	    
	  
	  		
	  
	  	2020-01-14
	  		
	  				
	  					 
	  
					
						发现一个显示错误 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  	    
	    
	  
	  		
	  
	  	2020-01-01
	  		
	  				
	  					 
	  
					
						今日消费显示为0,但是我明明记录了 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  	    
	    
	  提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 13 条以前的提问,请 点击查看 
			
			提问之前请登陆
			
		 
		提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢	
	 
 | 
	|||||||||||||||||