Payment

Payment

Above UI we are going to create by AWT for Payment in our Hostel management system desktop application. For that first we create a window and configure its title, size and color. Here we are creating a window at Top Level so we can add this window at the top of any other window.

    
	JFrame frame = new JFrame("Payment");
	Utils.centeredFrame(frame, winWidth, winHeight, "Payment");
	frame.setResizable(false);
	      
	Container mainContainer=frame.getContentPane();
	mainContainer.setBackground(Color.gray);

	int panelWid = winWidth-winWidth/20;
	int panelHig = winHeight-winHeight/10;

	JPanel panel = new JPanel();
	panel.setLayout(null);
	panel.setOpaque(false);
	panel.setBackground(Color.white);
	panel.setSize(new Dimension(winWidth-winWidth/20,winHeight-winHeight/10));
	panel.setLocation(winWidth/50,winHeight/40);
	mainContainer.add(panel,BorderLayout.CENTER);
    

After creation of window, we will add a canvas background.

    
	JComponent jcomponent=new Background(winWidth/50,winHeight/40,(winWidth-winWidth/20),winHeight-winHeight/10); 
	mainContainer.add(jcomponent,BorderLayout.CENTER);

    public class Background extends JComponent {
	
		int width, height,setX,setY;

    	public Background (int setX,int setY,int width, int height) {
    		this.width=width;
    		this.height=height;
    		this.setX=setX;
    		this.setY=setY;
    	
       		setSize(width, height);
    	}
	
    	@Override
    	public void paint(Graphics g) {
        	Graphics2D g2 = (Graphics2D) g;

        	g2.setPaint(Color.white);

        	double x = setX;
        	double y = setY;
        	double w = width;
        	double h = height;
        	RoundRectangle2D round=new RoundRectangle2D.Double(x, y, w, h, 80, 80);
        	g2.fill(round);
    	}

    
	}
    

Once your window is created with custom background, Here we Create Header.

     
    // for heading Layout
	heading = new JLabel("Payment");
	heading.setHorizontalAlignment(JLabel.CENTER);
	heading.setVerticalAlignment(JLabel.CENTER);
	heading.setBackground(Color.decode("#80c2b2"));
	heading.setForeground(Color.black);
	heading.setFont(headingFont);
	heading.setBounds(0,panelHig/30, panelWid, panelHig/15);
	        
	panel.add(heading);
	        
	        
	JSeparator jSeparator1 = new JSeparator();
	jSeparator1.setBackground(Color.black);
	jSeparator1.setAlignmentX(JSeparator.CENTER_ALIGNMENT);
	jSeparator1.setBounds(20, 80, winWidth-winWidth/12, panelHig/13);
	panel.add(jSeparator1);
        
    

Now we will create layouts with some reduced dimensions.

    
	leftside =  Utils.createPanel(winWidth/3,winHeight*7/10,new Point(winWidth/50,winHeight/6), true,"Action");
	panel.add(leftside,BorderLayout.NORTH);
	leftside.setLayout(null);
	        
	rightside =  Utils.createPanel(winWidth*57/100,winHeight*7/10,new Point(winWidth/3+winWidth/30,winHeight/6), true,"Payment Details");
	panel.add(rightside,BorderLayout.WEST);
	rightside.setLayout(null);
	
	

Now we add UI for payment in leftside layout, Here we add Room No in a combobox from database and month combobox for paid for month.

    
    	JLabel room_label =new JLabel();
	    room_label.setText("Room No :");
	    room_label.setForeground(Color.black);
	    room_label.setFont(new Font("Lucida",Font.PLAIN,12));
	    room_label.setSize(new Dimension(winWidth/3,winHeight/10));
	    room_label.setLocation(60, 30); 
        leftside.add(room_label);
            
            
            
        ArrayList room_list = new ArrayList();
        room_list.add("Select");
            
            
        //----------- Getting room data ------
        Connection conn = SQLiteJDBCDriverConnection.connect1();
		try {
				
			PreparedStatement insert = conn.prepareStatement("select room_no from room");
			ResultSet rs = insert.executeQuery();
			
			while(rs.next()) {
					
				room_list.add(rs.getString("room_no"));
				
			}
				
			conn.close();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
            
              
        room_no_combo = new JComboBox(room_list.toArray()); 
        room_no_combo.setBounds(60, 80, 300, 30);
        room_no_combo.setBackground(Color.WHITE);
        room_no_combo.setFont(new Font("Lucida",Font.PLAIN,12));

        room_no_combo.setSelectedIndex(0);
        leftside.add(room_no_combo);


		JLabel paid_for_label =new JLabel();
        paid_for_label.setText("Paid for :");
        paid_for_label.setForeground(Color.black);
        paid_for_label.setFont(new Font("Lucida",Font.PLAIN,12));
        paid_for_label.setSize(new Dimension(winWidth/3,winHeight/10));
        paid_for_label.setLocation(60, 105); 
    	leftside.add(paid_for_label);
	        
	        
        String s2[] = { "Select", "January", "February", "March", "April", "May", "June", "July",
                    "August", "September", "October", "November", "December" }; 
            
        month_combo = new JComboBox(s2); 
        month_combo.setBounds(60, 155, 300, 30);
        month_combo.setBackground(Color.WHITE);
        month_combo.setFont(new Font("Lucida",Font.PLAIN,12));

        month_combo.setSelectedIndex(0);
            
        leftside.add(month_combo);
            
            
        month_combo.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                	  	
            	if(e.getStateChange() == ItemEvent.SELECTED) {
                    	
                    selected_month = month_combo.getSelectedItem().toString();
                
                }           
                    
        }
    	});
    

Name and amount in Payment UI.

    
    Border loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);

	        
	TitledBorder amounttittle = BorderFactory.createTitledBorder(loweredetched, "Amount");
	amounttittle.setTitleJustification(TitledBorder.LEFT);
	        
	        
	TitledBorder nametittle = BorderFactory.createTitledBorder(loweredetched, "Student Name");
	nametittle.setTitleJustification(TitledBorder.LEFT);
	        
    amount = new JTextField();
	amount.setSize(new Dimension(300,winHeight/15));
	amount.setLocation(60,225);	
	amount.setBorder(amounttittle);
	amount.setVisible(true);
	leftside.add(amount);
	        
	        
	std_name = new JTextField();
	std_name.setSize(new Dimension(300,winHeight/15));
	std_name.setLocation(60,325);	
	std_name.setBorder(nametittle);
	std_name.setVisible(true);
	leftside.add(std_name);
        

Here we add "PAY" Button in leftside layout and its logic for payment details add in database when click "PAY" Button:

    
	JButton addButton = new JButton(new ImageIcon(((new ImageIcon("images/button32.png")).getImage()).getScaledInstance(200, 50, java.awt.Image.SCALE_SMOOTH)));      
	addButton.setText("Pay");
	addButton.setContentAreaFilled(false);
	addButton.setBorder(null);
	addButton.setForeground(Color.white);
	addButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
	addButton.setHorizontalTextPosition(JButton.CENTER);
	addButton.setVerticalTextPosition(JButton.CENTER);
	addButton.setFont(new Font("Lucida",Font.PLAIN,16));
	       
	addButton.setBounds(110,450, 200, 50);
	       
	        
	leftside.add(addButton);
	addButton.addActionListener(new ActionListener() {
	    @Override
	    public void actionPerformed(ActionEvent ae) {
	            	
	            	
	        String var = "";
	        String name = "";
	        String rent = "";
	        String date = Utils.getDate("yyyy-MM-dd");
	        Boolean is_month_entered = false;
	        Boolean is_name_entered = false;
	        Boolean is_amount_entered = false;
	            	
					
			if(month_combo.getSelectedItem().toString().equalsIgnoreCase("Select")){
				var += "Select Month, ";
			}else {
						
				is_month_entered = true;
			}
	            	
			if(std_name.getText().equalsIgnoreCase("") || std_name.getText().equalsIgnoreCase(" ")){
				var += "Name Should not be empty, ";
			}else {
						
				name =  std_name.getText();
				is_name_entered = true;
			}
					
			if(amount.getText().equalsIgnoreCase("") || amount.getText().equalsIgnoreCase(" ")){
				var += "Amount Should not be empty, ";
			}else {
						
				rent =  amount.getText();
				is_amount_entered = true;
			}
					
	        Connection conn = SQLiteJDBCDriverConnection.connect1();
	            	
	        if(is_month_entered && is_name_entered && is_amount_entered) {
	            		
	            try {
		    		PreparedStatement insert = conn.prepareStatement("insert into rent_payment(room_number, paid_for, 
															paid_by, paid_date_time, paid_amount) VALUES(?,?,?,?,?)");
					insert.setString(1, selected_room_no);
					insert.setString(2, selected_month);
					insert.setString(3, name);
					insert.setString(4, date);
					insert.setString(5, rent);
							
					insert.executeUpdate();
					JOptionPane.showMessageDialog(null, "Payment successfully");
					
					payment_table_update(selected_room_no);
					amount.setText("");
					std_name.setText("");
					month_combo.setSelectedIndex(0);
					room_no_combo.setSelectedIndex(0);
							
							 
		    				
		    		conn.close();
		    	} catch (SQLException e1) {
		    		// TODO Auto-generated catch block
		    		e1.printStackTrace();
		    	}
	            		
	         	
	        }else {
	            		
	            JOptionPane.showMessageDialog(null, var,"Error message", JOptionPane.ERROR_MESSAGE);
	            		
	        }       	
	    		
	    }
	});	               
    

Now we add Payment history table when selected room from combobox.


payment_table();
	        
	        
room_no_combo.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent e) {
                	
    	if(e.getStateChange() == ItemEvent.SELECTED) {
                    	
    		selected_room_no = room_no_combo.getSelectedItem().toString();
                
            get_data(selected_room_no);
                    	
            payment_table_update(selected_room_no);
                    	
    	}
                    
    }
});

Here Payment table.


	private void payment_table() {		
			
		// TODO Auto-generated method stub
		String[] columnNames = {"Room No","Paid for","Paid By",
								"Paid Date","Paid Amount"};
						
		DefaultTableModel model = new DefaultTableModel();
		model.setRowCount(0);
						
		model.setColumnIdentifiers(columnNames); 
						
		paymentTable = new JTable();

		paymentTable.setBounds(15,90, winWidth*55/100, winHeight*7/15);
		paymentTable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
	
		rightside.add(paymentTable);
		paymentTable.setModel(model);
	
		JScrollPane scrollPane = new JScrollPane(paymentTable);
		scrollPane.setBounds(15,90, winWidth*55/100,winHeight*7/15);
		paymentTable.setFillsViewportHeight(true);
		rightside.add(scrollPane);
						
		DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
		centerRenderer.setHorizontalAlignment( JLabel.CENTER );
		paymentTable.getColumnModel().getColumn(0).setCellRenderer( centerRenderer );
		paymentTable.getColumnModel().getColumn(1).setCellRenderer( centerRenderer );
		paymentTable.getColumnModel().getColumn(2).setCellRenderer( centerRenderer );
		paymentTable.getColumnModel().getColumn(3).setCellRenderer( centerRenderer );
		paymentTable.getColumnModel().getColumn(4).setCellRenderer( centerRenderer );
						
						
		paymentTable.getTableHeader().setFont(new Font("SansSerif", 1, 13));
		paymentTable.getTableHeader().setBackground(Color.decode("#4287f5"));
		paymentTable.getTableHeader().setForeground(Color.decode("#FFFFFF"));
						
		paymentTable.getColumnModel().getColumn(0).setPreferredWidth(30);
		paymentTable.getColumnModel().getColumn(4).setPreferredWidth(30);
		paymentTable.getColumnModel().getColumn(2).setPreferredWidth(40);
						
		paymentTable.setRowHeight(30);
			
	}

Here's logic of get selected room data.


private void get_data(String room_no) {		
			
	amount.setText("");
	std_name.setText("");
	Connection conn = SQLiteJDBCDriverConnection.connect1();
	try {
				
		PreparedStatement insert = conn.prepareStatement("select room_rent from room where room_no IS ?");
		insert.setString(1, room_no);
		ResultSet rs = insert.executeQuery();
			
		while(rs.next()) {
			amount.setText(rs.getString("room_rent"));
					
		}
				
		conn.close();
	} catch (SQLException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
	conn = SQLiteJDBCDriverConnection.connect1();
	try {
				
		PreparedStatement insert = conn.prepareStatement("select alloted_to from room_alloted where room_number IS ?");
		insert.setString(1, room_no);
		ResultSet rs = insert.executeQuery();
			
		while(rs.next()) {
					
			insert = conn.prepareStatement("select student_name from student where student_id IS ?");
			insert.setString(1, rs.getString("alloted_to"));
			ResultSet rs0 = insert.executeQuery();
					
			while(rs0.next()) {
						
				std_name.setText(rs0.getString("student_name"));
						
			}
		
		}
				
		conn.close();
	} catch (SQLException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}			
			
}

    

Here is logic for update payment table.


private void payment_table_update(String room_no) {		
				
	Connection conn = SQLiteJDBCDriverConnection.connect1();
	try {
					
		PreparedStatement insert = conn.prepareStatement("select room_number, paid_for, paid_by, paid_date_time, paid_amount from rent_payment where room_number IS ?");
		insert.setString(1, room_no);
		ResultSet rs = insert.executeQuery();
					
					
		DefaultTableModel dft = (DefaultTableModel)paymentTable.getModel();
		dft.setRowCount(0);
		dft.fireTableDataChanged();
					
					
		while(rs.next()) {
			Vector v2 = new Vector();
					
			v2.add(rs.getString("room_number"));
			v2.add(rs.getString("paid_for"));
			v2.add(rs.getString("paid_by"));
			v2.add(rs.getString("paid_date_time"));
			v2.add(rs.getString("paid_amount"));
						
						
					
			dft.addRow(v2);
						
		}
					
		conn.close();
	} catch (SQLException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
				
}

	

Here is logic dashboard visibility.


	frame.getContentPane().setBackground(Color.gray);
	        
	frame.addWindowListener(new WindowAdapter(){  
	    public void windowClosing(WindowEvent e) {  
	        frame.dispose();
	        dashboardFrame.setVisible(true);
	    }  
	});  
			
	frame.setVisible(true);
	
	

At last we add logic to table rows change their position.


public void tableChanged(TableModelEvent e) {
	// TODO Auto-generated method stub
	int row = e.getFirstRow();
	int column = e.getColumn();
	TableModel model = (TableModel)e.getSource();
	String columnName = model.getColumnName(column);
	Object data = model.getValueAt(row, column);
	        

	System.out.println(columnName+data+"Wrong");
}

				

Programmer Mirta is for learning and training. Projects might be simple to improve learning. Projects are constantly reviewed to avoid errors, but we cannot assure full correctness of all content. While using Programmer Mitra, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 2021 by Programmer Mitra. All Rights Reserved.