Java Banking Project Source Code

How To Create a Banking Application in Java NetBeans

Java Banking Project




In this Java Tutorial we will see How to Create a simple banking app using Java Swing in Netbeans.
In this java bank project we will create custom panels, buttons and chart .

What We Are Gonna Use In This Project:

- Java Programming Language.
- NetBeans Editor.




if you want the source code click on the download button below




Project Source Code:


    /**
     * Method to create a panel with rounded corners
     */
    private JPanel createRoundedPanel(Color bgColor, int cornerRadius){
        
        JPanel panel = new JPanel(){
            @Override
            protected void paintComponent(Graphics g){
                super.paintComponent(g);
                Dimension arcs = new Dimension(cornerRadius, cornerRadius);
                int width = getWidth();
                int height = getHeight();
                Graphics2D g2d = (Graphics2D)g;
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g2d.setColor(bgColor);
                g2d.fillRoundRect(0, 0, width - 1, height - 1, arcs.width, arcs.height);
            }
        };
        panel.setOpaque(false);
        return panel;
        
    }
    
app header

balance card



    

    /**
     * Method to create a styled button with rounded corners
     */
    private JButton createButton(String text, Color bgColor, Color fgColor){
        
        JButton button = new JButton(text){
            
            @Override
            protected void paintComponent(Graphics g){
                
                if(getModel().isArmed()){ g.setColor(bgColor.darker()); }
                
                else{ g.setColor(bgColor); }
                
                Graphics2D g2d = (Graphics2D)g;
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g2d.fill(new RoundRectangle2D.Double(0,0, getWidth() - 1, getHeight() - 1, 10, 10));
                super.paintComponent(g);
                
            }
            
        };
        
        button.setForeground(fgColor);
        button.setBackground(bgColor);
        button.setFont(new Font("Arial", Font.BOLD, 12));
        button.setFocusPainted(false);
        button.setBorderPainted(false);
        button.setContentAreaFilled(false);
        
        return button;
        
    }
    
        
transaction amount



    

    /**
     * Creates the transactions history panel
     */
    // Method to update the transaction history panel
    private void updateHistory(){
        historyPanel.removeAll();
        
        // Iterate through transactions and create a panel for each
        for(Transaction transaction : transactions){
            JPanel transactionPanel = createRoundedPanel(new Color(33,33,33), 5);
            transactionPanel.setLayout(new BorderLayout());
            transactionPanel.setBorder(new EmptyBorder(10, 15, 10, 15));
            
            // Create and style the transaction type label
            JLabel typeLabel = new JLabel(transaction.getType());
            typeLabel.setForeground(transaction.getType().equals("deposit") ?
                    new Color(3,218,198) : new Color(207,102,121));
            typeLabel.setFont(new Font("Arial", Font.BOLD, 12));
            
            // Create and style the transaction amount label
            JLabel amountLabel = new JLabel(String.format("$%.2f", transaction.getAmount()));
            amountLabel.setForeground(Color.WHITE);
            amountLabel.setFont(new Font("Arial", Font.PLAIN, 12));
            
            // Create and style the transaction date label
            JLabel dateLabel = new JLabel(new SimpleDateFormat("MMM dd, yyyy HH:mm").format(transaction.getDate()));
            dateLabel.setForeground(new Color(150,150,150));
            amountLabel.setFont(new Font("Arial", Font.PLAIN, 10));
            
            // Create a panel for the left side (type and date)
            JPanel leftPanel = new JPanel(new GridLayout(2, 1));
            leftPanel.setOpaque(false);
            leftPanel.add(typeLabel);
            leftPanel.add(dateLabel);
            
            // Create a panel for the right side (amount)
            JPanel rightPanel = new JPanel(new BorderLayout());
            rightPanel.setOpaque(false);
            rightPanel.add(amountLabel, BorderLayout.EAST);
            
            // Add left and right panels to the transaction panel
            transactionPanel.add(leftPanel, BorderLayout.WEST);
            transactionPanel.add(rightPanel, BorderLayout.EAST);
            
            // Add the transaction panel to the history panel
            historyPanel.add(transactionPanel);
            historyPanel.add(Box.createRigidArea(new Dimension(0, 5)));
        }
        
        // Refresh the history panel
        historyPanel.revalidate();
        historyPanel.repaint();
        
    }
    
    
    // Method to customize the scroll bar appearance and behavior
    private void customizeScrollBar(JScrollPane scrollpane){
        // Set the scroll bar to appear only when needed
        scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
         // Get the vertical scroll bar
        JScrollBar verticalBar = scrollpane.getVerticalScrollBar();
        // Set a custom UI for the scroll bar
        verticalBar.setUI(new ModernScrollBarUI());
        // Set the preferred width of the scroll bar
        verticalBar.setPreferredSize(new Dimension(8, Integer.MAX_VALUE));
        // Make the scroll bar transparent
        verticalBar.setOpaque(false);
        // Set the amount to scroll for each unit increment
        verticalBar.setUnitIncrement(16);
        // Adjust the z-order of components to ensure proper layering
        scrollpane.setComponentZOrder(verticalBar, 0);
        scrollpane.setComponentZOrder(scrollpane.getViewport(), 1);
        scrollpane.getVerticalScrollBar().setOpaque(false);
        
    }
    
    
    
    // Custom ScrollBarUI class for a modern look
    private class ModernScrollBarUI extends BasicScrollBarUI{
    
        private final int THUMB_SIZE = 60;
        private final Color THUMB_COLOR = new Color(3,218,198);
        private final Color THUMB_HOVER_COLOR = new Color(4,245,233);
        private final Color TRACK_COLOR = new Color(30,30,30);
        private final int ARC = 10;
        private boolean isDragging = false;
        private boolean isRollover = false;
        
        @Override
        protected JButton createDecreaseButton(int orientation){
            return new InvisibleButton();
        }
        
        @Override
        protected JButton createIncreaseButton(int orientation){
            return new InvisibleButton();
        }
        
        // Custom painting of the scroll bar track
        @Override
        protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds){
            
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setColor(TRACK_COLOR);
            g2d.fill(new RoundRectangle2D.Double(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height, ARC, ARC));
            g2d.dispose();
            
        }
        
        // Custom painting of the scroll bar thumb
        @Override
        protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds){
            
            if(thumbBounds.isEmpty() || !scrollbar.isEnabled()){
                return;
            }
            
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            
            // Determine the color based on mouse interaction
            Color thumbColor = isRollover || isDragging ? THUMB_HOVER_COLOR : THUMB_COLOR;
            
            // Add a glow effect when the mouse is over the thumb or dragging
            if(isRollover || isDragging){
                
                for(int i = 0; i < 5; i++){
                    Color glowColor = new Color(thumbColor.getRed(),thumbColor.getGreen(),thumbColor.getBlue(), 50 - i * 10);
                    g2d.setColor(glowColor);
                    g2d.fill(new RoundRectangle2D.Double(thumbBounds.x - i, thumbBounds.y - i, thumbBounds.width + 20 * i, thumbBounds.height + 20 * i, 10 * ARC + i, 10 * ARC + i));
                }
                
            }
            
            // Draw the main thumb
            g2d.setColor(thumbColor);
            g2d.fill(new RoundRectangle2D.Double(thumbBounds.x, thumbBounds.y, thumbBounds.width, thumbBounds.height, ARC, ARC));
            
            // Add grip lines to the thumb
            g2d.setColor(new Color(255,255,255, 100));
            int lineY = thumbBounds.y + thumbBounds.height / 2 - 3;
            for(int i = 0; i < 3; i++)
            {
                g2d.drawLine(thumbBounds.x + 3, lineY, thumbBounds.x + thumbBounds.width - 3, lineY);
                lineY += 3;
            }
            
            g2d.dispose();
            
        }
        
        // Update thumb bounds and repaint
        @Override
        protected void setThumbBounds(int x, int y, int width, int height){
            
            super.setThumbBounds(x, y, width, height);
            scrollbar.repaint();
            
        }
        
        // Install custom listeners for mouse interactions
        @Override
        protected void installListeners(){
            
            super.installListeners();
            
            // Handle mouse enter/exit events
            scrollbar.addMouseListener(new MouseAdapter() {
                
                @Override
                public void mouseEntered(MouseEvent e){
                    
                    isRollover = true;
                    scrollbar.repaint();
                    
                }
                
                @Override
                public void mouseExited(MouseEvent e){
                    
                    isRollover = false;
                    scrollbar.repaint();
                    
                }
                
            });
            
            // Handle mouse drag events
            scrollbar.addMouseMotionListener(new MouseMotionAdapter(){
            
                @Override
                public void mouseDragged(MouseEvent e){
                    isDragging = true;
                    scrollbar.repaint();
                }
            
            });
            
            // Handle mouse release events
            scrollbar.addMouseListener(new MouseAdapter(){
            
                @Override
                public void mouseReleased(MouseEvent e){
                    isDragging = false;
                    scrollbar.repaint();
                }
            
            });

        }
        
        // Set preferred size of the scroll bar
        @Override
        public Dimension getPreferredSize(JComponent c){
            return new Dimension(8, THUMB_SIZE);
        }
        
        
    }
    
    // Custom JButton class for invisible buttons
    private class InvisibleButton extends JButton{
        
        private InvisibleButton(){
            setOpaque(false);
            setFocusable(false);
            setFocusPainted(false);
            setBorderPainted(false);
            setContentAreaFilled(false);
        }
    
    }
    
    
transaction history panel



------------------------------------------------------------------
    /**
     * Create chart to display the transactions
     */
    // Draw a financial chart based on transaction data.
    private void drawChart(){
        // Get the dimensions of the chart panel
        int width = chartPanel.getWidth();
        int height = chartPanel.getHeight();
        
        // Check if the panel has valid dimensions
        if(width <= 0 || height <= 0){
            // If not, schedule a repaint and exit
            SwingUtilities.invokeLater(chartPanel::repaint);
            return;
        }
        
        // Check if there are any transactions to display
        if(transactions.isEmpty()){
            // If not, draw an empty chart and exit
            drawEmptyChart(width, height);
            return;
        }
        
         // Set margins for the chart
        int chartMargin = 40;
        // Calculate the actual chart area dimensions
        int chartWidth = width - 2 * chartMargin;
        int chartHeight = height - 2 * chartMargin;
        
        // Create a new image for the chart
        BufferedImage chartImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        // Get the graphics context for drawing
        Graphics2D g2d = chartImage.createGraphics();
        // Enable anti-aliasing for smoother lines
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
         // Set the background color (dark grey)
        g2d.setColor(new Color(25, 25, 25));
        // Fill the entire image with the background color
        g2d.fillRect(0, 0, width, height);
        // Initialize variables to track balance range
        double minBalance = 0;
        double maxBalance = 0;
        double runningBalance = 0;
        
        // Iterate through transactions to find min and max balance
        for(Transaction transaction : transactions){
            // Update running balance based on transaction type
            runningBalance += transaction.getType().equals("deposit") ? 
                    transaction.getAmount() : -transaction.getAmount();
            
            // Update min and max balance
            minBalance = Math.min(minBalance, runningBalance);
            maxBalance = Math.max(maxBalance, runningBalance);
        }
        
         // Calculate the range of balances
         double balanceRange = Math.max(maxBalance - minBalance, 1);
         
         // Ensure the chart shows some range, even with one transaction
         if(balanceRange < 100){
             maxBalance = Math.max(maxBalance, maxBalance + 100);
             balanceRange = maxBalance - minBalance;
         }
         
         // Set color and font for axis labels and grid lines
         g2d.setColor(new Color(100,100,100));
         g2d.setFont(new Font("Arial", Font.PLAIN, 10));
         
        // Number of Y-axis labels
         int yLabelCount = 5;
         // Draw Y-axis labels and grid lines
         for(int i = 0; i <= yLabelCount; i++){
             // Calculate balance for this label
             double balance = minBalance + (balanceRange * i / yLabelCount);
             // Calculate Y-coordinate for this label
             int y =  (height - chartMargin - (int)((balance - minBalance) / balanceRange * chartHeight));
             // Format balance label
             String label = String.format("$%.0f", balance);
             // Get font metrics for text positioning
             FontMetrics fm = g2d.getFontMetrics();
             // Draw balance label
             g2d.drawString(label, chartMargin - fm.stringWidth(label) - 5, y + fm.getAscent() / 2);
             // Set color for grid lines
             g2d.setColor(new Color(40,40,40));
             // Set dashed stroke for grid lines
             g2d.setStroke(new BasicStroke(1,BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{5},0));
             // Draw horizontal grid line
             g2d.drawLine(chartMargin, y, width - chartMargin, y);
             // Reset color for next iteration
             g2d.setColor(new Color(100, 100, 100));
         }
        
         // List to store points for the chart line
         List<Point2D> points = new ArrayList<>();
         runningBalance = 0;
         
         // Calculate points for each transaction
         for(int i = 0; i < transactions.size(); i++){
             Transaction transaction = transactions.get(i);
             // Update running balance
             runningBalance += transaction.getType().equals("deposit") ? transaction.getAmount() : -transaction.getAmount();
             // Calculate X-coordinate
             double x = chartMargin + (i * chartWidth / Math.max(transactions.size() - 1, 1));
             // Calculate Y-coordinate
             double y = height - chartMargin - ((runningBalance - minBalance) / balanceRange) * chartHeight;
             // Add point to list
             points.add(new Point2D.Double(x, y));
         }
         
         // Check if there's more than one point to draw a line
         if(points.size() > 1){
             // Create a path for the smooth curve
             Path2D curvePath = new Path2D.Double();
              // Move to the first point
             curvePath.moveTo(points.get(0).getX(), points.get(0).getY());
             // Create smooth curve through all points
             for(int i = 1; i < points.size(); i++){
                 // Get current and adjacent points
                 Point2D p0 = points.get(Math.max(i - 1, 0));
                 Point2D p1 = points.get(i);
                 Point2D p2 = points.get(Math.min(i + 1, points.size() - 1));
                 
                 // Calculate control points for the curve
                 Point2D ctrl1 = new Point2D.Double((p0.getX() + p1.getX()) / 2, p0.getY());
                 Point2D ctrl2 = new Point2D.Double((p1.getX() + p2.getX()) / 2, p1.getY());
                 
                 // Add curve segment to path
                 curvePath.curveTo(ctrl1.getX(), ctrl1.getY(), ctrl2.getX(), ctrl2.getY(), p1.getX(), p1.getY());
                 
             }
             
             // Create a gradient for the chart area
             GradientPaint gradient = new GradientPaint(
                     0, chartMargin, new Color(3, 218, 198, 100),
                     0, height - chartMargin, new Color(3, 218, 198, 10)
             );
             
             // Create a path for the filled area under the curve
             Path2D areaPath = new Path2D.Double(curvePath);
             areaPath.lineTo(width - chartMargin, height - chartMargin);
             areaPath.lineTo(chartMargin, height - chartMargin);
             areaPath.closePath();
             
             // Fill the area under the curve with the gradient
             g2d.setPaint(gradient);
             g2d.fill(areaPath);
             // Set color and stroke for the curve line
             g2d.setColor(new Color(3, 218, 198));
             g2d.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
             // Draw the smooth curve
             g2d.draw(curvePath);
             
         }
         
         else if(points.size() == 1){
             // For a single point, draw a small line segment
             Point2D point = points.get(0);
             g2d.setColor(new Color(3, 218, 198));
             g2d.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
             g2d.draw(new Line2D.Double(chartMargin, point.getY(), point.getX(), point.getY()));
         }
         
         // Draw data points with a glow effect
         for(Point2D point : points){
              // Create a radial gradient for the glow effect
             RadialGradientPaint glowGradient = new RadialGradientPaint( 
                     (float)point.getX(), (float)point.getY(), 10f,
                     new float[]{0f, 1f},
                     new Color[]{new Color(3, 218, 198, 100),new Color(3, 218, 198, 0)}
             );
             
             // Apply the glow gradient
             g2d.setPaint(glowGradient);
             // Draw the glow
             g2d.fillOval((int)point.getX() - 10, (int)point.getY() - 10, 20, 20);
             // Draw the main point
             g2d.setColor(new Color(3, 218, 198));
             g2d.fillOval((int)point.getX() - 4, (int)point.getY() - 4, 8, 8);
             // Draw a white center for the point
             g2d.setColor(Color.WHITE);
             g2d.fillOval((int)point.getX() - 2, (int)point.getY() - 2, 4, 4);
             
         }
         
         // Draw X-axis labels
         g2d.setColor(new Color(100, 100, 100));
         g2d.setFont(new Font("Arial", Font.PLAIN, 10));
         // Determine number of X-axis labels (max 5)
         int xLabelCount = Math.min(5, transactions.size());
         
         for(int i = 0; i < xLabelCount; i++){
             // Calculate index of transaction for this label
             int transactionIndex = i * (transactions.size() - 1) / Math.max(xLabelCount - 1, 1);
             // Calculate X-coordinate for label
             int x = chartMargin + (int) (transactionIndex * chartWidth / Math.max(transactions.size() - 1, 1));
             // Create label text
             String label = String.valueOf(transactionIndex + 1);
             FontMetrics fm = g2d.getFontMetrics();
             // Draw the label
             g2d.drawString(label, x - fm.stringWidth(label) / 2, height - chartMargin + fm.getHeight());
         }
         
         // Dispose of the graphics context
         g2d.dispose();
         
         
         // Create a new panel to display the chart image and handle interactions
         JPanel interactiveChartPanel = new JPanel(){
         
             @Override
             protected void paintComponent(Graphics g){
                 super.paintComponent(g);
                 // Draw the chart image on the panel
                 g.drawImage(chartImage, 0, 0, null);
                 
             }
             
         };
         
         // Set the preferred size of the panel
         interactiveChartPanel.setPreferredSize(new Dimension(width, height));
         
         // Add mouse motion listener for interactive tooltips
         interactiveChartPanel.addMouseMotionListener(new MouseMotionAdapter() {
             
             @Override
             public void mouseMoved(MouseEvent e){
                 // Check if mouse is near any data point
                 for(int i = 0; i < points.size(); i++){
                     
                     Point2D point = points.get(i);
                     if(point.distance(e.getX(), e.getY()) < 10)
                     {
                         // Get transaction data for this point
                         Transaction transaction = transactions.get(i);
                         // Create tooltip HTML
                         String tooltip = String.format("<html><body style='background-color:#1e1e1e; color:#e0e0e0; padding:30px; font-family:Arial;'>"
                                 + "<div><h3 style='margin-bottom:25px; color:#00ffc6; font-size:1.8em;'"
                                 + "border-bottom:3px solid #00ffc6; padding-bottom:15px;'> Transaction %d </h3>"
                                 +"<table style='width:100%%; font-size:1em; line-height:1.8;'>"
                                 +"<tr><td style='font-weight:bold; color:#a0a0a0;'>Type: </td>"
                                 +"<td style='text-align:right; color:#ffffff;'>%s</td></tr>"
                                 +"<tr><td style='font-weight:bold; color:#a0a0a0;'>Amount: </td>"
                                 +"<td style='text-align:right; color:#ffffff;'>$%.2f</td></tr>"
                                 +"<tr><td style='font-weight:bold; color:#a0a0a0;'>Date: </td>"
                                 +"<td style='text-align:right; color:#ffffff;'>%s</td></tr>"
                                 +"</table>"
                                 + "</body></html>",
                                 i + 1,
                                 transaction.getType(),
                                 transaction.getAmount(),
                                 new SimpleDateFormat("MMM dd, yyyy HH:mm").format(transaction.getDate()));
                         
                         // Set tooltip text
                         interactiveChartPanel.setToolTipText(tooltip);
                         return;
                     }
                     
                 }
                 
                 // Clear tooltip if not near any point
                 interactiveChartPanel.setToolTipText(null);
                 
             }
             
         });
         
         // Clear existing content from chart panel
         chartPanel.removeAll();
         // Add the interactive chart panel
         chartPanel.add(interactiveChartPanel);
         // Revalidate and repaint the chart panel
         chartPanel.revalidate();
         chartPanel.repaint();
        
         
    }
    
    
    
    // Method to draw an empty chart when there are no transactions
    private void drawEmptyChart(int width, int height){
        if(width <= 0 || height <= 0){
            SwingUtilities.invokeLater(chartPanel::repaint);
            return;
        }
                
        // Create a buffered image for the empty chart
        BufferedImage chartImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = chartImage.createGraphics();
        // Set up the graphics context and draw the background
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setColor(new Color(25,25,25));
        g2d.fillRect(0, 0, width, height);
        
        // Draw the "No transactions" message
        g2d.setColor(new Color(200,200,200));
        g2d.setFont(new Font("Arial", Font.PLAIN, 14));
        String message = "No transactions to display";
        FontMetrics fm = g2d.getFontMetrics();
        g2d.drawString(message, (width - fm.stringWidth(message)) / 2, height / 2);
        g2d.dispose();
        
        // Update the chart panel with the empty chart image
        JLabel emptyChartLabel = new JLabel(new ImageIcon(chartImage));
        chartPanel.removeAll();
        chartPanel.add(emptyChartLabel);
        chartPanel.revalidate();
        chartPanel.repaint();

    }
    
    

empty chart
    
transaction chart

chart tooltip
    


-------------------------------------------------------------------------------

    /**
     * Create custom error dialog box
     */
    
    // This class creates a custom error dialog box, extending JDialog
    public static class ErrorDialog extends JDialog{
        
        // Constructor that takes a parent window and an error message
        public ErrorDialog(JFrame parent, String message){
            // Call parent constructor with title "Error" and modal=true (blocks input to other windows)
            super(parent, "Error", true);
            // Remove the default window decorations (title bar, borders) for a custom look
            setUndecorated(true);
        
            // Create the main panel with GridBagLayout for centered content
            JPanel panel = new JPanel(new GridBagLayout()) {
                 @Override
                 protected void paintComponent(Graphics g){
                     // Call the parent's painting method first
                     super.paintComponent(g);
                     // Create a new Graphics2D object for better drawing capabilities
                     Graphics2D g2d = (Graphics2D) g.create();
                     // Enable anti-aliasing for smoother edges
                     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                     // Set the background color to light gray
                     g2d.setColor(new Color(240,240,240));
                     // Draw a rounded rectangle that fills the entire panel
                     g2d.fill(new RoundRectangle2D.Float(0,0,getWidth(),getHeight(),15,15));
                     // Clean up the graphics object
                     g2d.dispose();
                }
            };
            
            // Make the panel transparent to show the custom background
            panel.setOpaque(false);
            
            // Create a panel for the content using BoxLayout for vertical arrangement
            JPanel contentPanel = new JPanel();
            contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
            contentPanel.setOpaque(false);
            
            // Add the standard error icon from the system's UI manager
            JLabel iconLabel = new JLabel(UIManager.getIcon("OptionPane.errorIcon"));
            iconLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
            contentPanel.add(iconLabel);
            // Add vertical spacing after the icon
            contentPanel.add(Box.createRigidArea(new Dimension(0, 20)));
            
            // Create and configure the message label with HTML formatting
            JLabel errorMessageLabel = new JLabel("<html><div style='text-align:center;width:250px; font-size:14px;'>" + message +"</div></html>");
            errorMessageLabel.setForeground(new Color(33,33,33));
            errorMessageLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
            contentPanel.add(errorMessageLabel);
            // Add vertical spacing after the message
            contentPanel.add(Box.createRigidArea(new Dimension(0, 25)));
            
            // Create a custom OK button
            JButton okButton = new JButton("Ok"){
                {
                    // Initialize button properties to remove default button styling
                    setOpaque(false);
                    setContentAreaFilled(false);
                    setBorderPainted(false);
                    setFocusPainted(false);
                }
                // Override paintComponent to create custom button appearance
                @Override
                protected void paintComponent(Graphics g){
                    Graphics2D g2d = (Graphics2D) g.create();
                     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                     // Change button color based on its state (pressed, hover, or normal)
                     if(getModel().isPressed()){
                         g2d.setColor(new Color(0,150, 136));
                     }
                     
                     else if(getModel().isRollover()){
                         g2d.setColor(new Color(0,170, 156));
                     }
                     
                     else{ g2d.setColor(new Color(0,191, 165)); }
                     
                     // Draw the rounded rectangle button shape
                     g2d.fill(new RoundRectangle2D.Float(0,0,getWidth(), getHeight(), 10, 10));
                     super.paintComponent(g);
                     g2d.dispose();
                    
                }
                
            };
            
            // Configure the OK button's appearance
            okButton.setFont(new Font("Arial", Font.BOLD, 14));
            okButton.setForeground(Color.WHITE);
            okButton.setPreferredSize(new Dimension(100, 35));
            okButton.setMaximumSize(new Dimension(100, 35));
            okButton.setAlignmentX(Component.CENTER_ALIGNMENT);
            // Add action listener to close the dialog when clicked
            okButton.addActionListener(e -> dispose());
            contentPanel.add(okButton);

        
            // Add the content panel to the main panel
            panel.add(contentPanel, new GridBagConstraints());
            // Set the main panel as the dialog's content pane
            setContentPane(panel);
            // Set the dialog size
            setSize(400,200);
            // Center the dialog relative to its parent window
            setLocationRelativeTo(parent);
            // Make the dialog window have rounded corners
            setShape(new RoundRectangle2D.Float(0, 0, 400, 200, 15, 15));
        
         }
        
        
        //  Method to show error messages
        public static void showErrorMessage(JFrame parent, String message){
            new ErrorDialog(parent, message).setVisible(true);
        }
        
    }
    
    








------------------------------------------------------------------------------------



    /**
     * Create necessary classes
     */
        
    // Inner class to represent a transaction
    private static class Transaction{
    
        private final String type;
        private final double amount;
        private final Date date;
        
        public Transaction(String type, double amount){
            this.type = type;
            this.amount = amount;
            this.date = new Date();
        }
        
        public String getType(){ return type; }
        
        public double getAmount(){ return amount; }
        
        public Date getDate(){ return date; }
        
    }
    
    // Inner class to handle deposit and withdraw actions
    private class TransactionHandler implements ActionListener{
        
        private final String type;
        
        public TransactionHandler( String type ){ this.type = type; }

        @Override
        public void actionPerformed(ActionEvent e) {
            
            try {
                // Parse the amount from the input field
                double amount = Double.parseDouble(amountField.getText());
                
                // Validate the amount
                if(amount <= 0){
                    showErrorMessage("Please enter a valid positive number");
                    return;
                }
                
                if(type.equals("withdraw") && amount > balance){
                    showErrorMessage("Insufficent funds");
                    return;
                }
                
                // Update the balance and add the transaction
                balance += type.equals("deposit") ? amount : -amount;
                transactions.add(new Transaction(type, amount));
                
                balanceLabel.setText(String.format("$%.2f", balance));
                
                drawChart();
                
                updateHistory();
                
                amountField.setText("");

            } catch (NumberFormatException ex) {
                showErrorMessage("Please enter a valid number");
            }
            
        }
        
    }
    
    






if you want the source code click on the download button below




disclaimer: you will get the source code with the database script and to make it work in your machine is your responsibility and to debug any error/exception is your responsibility this project is for the students who want to see an example and read the code not to get and run.





Share this

Related Posts

Latest
Previous
Next Post »

:)
:(
hihi
:-)
:D
=D
:-d
;(
;-(
@-)
:P
:o
:>)
(o)
:p
:-?
(p)
:-s
(m)
8-)
:-t
:-b
b-(
:-#
=p~
$-)
(y)
(f)
x-)
(k)
(h)
cheer