Java Create 3D Bar Chart

How to Create a Custom 3D Bar Chart In Java Netbeans



In this Java Tutorial we will see How To Create a Custom 3D Bar Chart from scratch using graphics class in java netbeans.
Note: The code generates random bar heights for demonstration purposes. 
In a real-world scenario, you would replace the random heights with actual data values for a meaningful representation of the chart.

What We Are Gonna Use In This Project:

- Java Programming Language.
- NetBeans Editor.





Project Source Code:


package threedbarchart;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Polygon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author 1BestCsharp
 */
public class ThreeDBarChart extends JFrame {

    private ThreeDBarChartPanel chartPanel;
    
    public ThreeDBarChart()
    {
        setTitle("3D Bar Chart");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500,500);
        setLocationRelativeTo(null);
        setResizable(false);
        
        chartPanel = new ThreeDBarChartPanel();
        getContentPane().add(chartPanel, BorderLayout.CENTER);
        
        JButton rotateButton = new JButton("Rotate");
        rotateButton.setBorderPainted(false);
        rotateButton.setFocusPainted(false);
        rotateButton.setBackground(new Color(50,10,20));
        rotateButton.setForeground(Color.white);
        rotateButton.setFont(new Font("Arial", Font.BOLD, 18));
        
        rotateButton.addActionListener((e) -> {
           
            chartPanel.rotateChart();
            
        });
        
        
        JPanel controlPanel = new JPanel();
        controlPanel.add(rotateButton);
        getContentPane().add(controlPanel, BorderLayout.SOUTH);
        
    }
    
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        new ThreeDBarChart().setVisible(true);
        
    }

}




class ThreeDBarChartPanel extends JPanel
{
    // Define RGB color codes
    Color colorSideFace = new Color(248,111,21);
    Color colorTopFace = new Color(250,194,24);
    Color colorFrontFace = new Color(222,179,173);
  

    public void rotateChart()
    {
        repaint();
    }
    
    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        
        int width = getWidth();
        int height = getHeight();
        
        // Clear the panel
        g.setColor(Color.white);
        g.fillRect(0, 0, width, height);
        
        g.setColor(Color.darkGray);
        
        // Calculate the number of bars and their dimensions
        int numBars = 5;
        int barWidth = 40;
        int barSpacing = 20;
        int baseX = (width - (numBars * (barWidth + barSpacing) - barSpacing))/2;
        int baseY = height - 100;
        
        // Draw 3D bars
        for(int i = 0; i < numBars; i++)
        {
            int x = baseX + i * (barWidth + barSpacing);
            // Random heights for demonstration
            int barheight = (int) (Math.random() * 200)+50;
            // Depth of the bars
            int z = 10;
            // Draw the front face
            g.fillRect(x, baseY - barheight, barWidth, barheight);
            g.setColor(colorFrontFace);
            
            // Draw the top face
            Polygon topFace = new Polygon();
            topFace.addPoint(x, baseY - barheight);
            topFace.addPoint(x + barWidth, baseY - barheight);
            topFace.addPoint(x + barWidth + z, baseY - barheight - z);
            topFace.addPoint(x + z, baseY - barheight - z);
            
            g.fillPolygon(topFace);
            g.setColor(colorTopFace);
            
            // Draw the side face
            Polygon sideFace = new Polygon();
            sideFace.addPoint(x + barWidth, baseY - barheight);
            sideFace.addPoint(x + barWidth, baseY);
            sideFace.addPoint(x + barWidth + z, baseY - z);
            sideFace.addPoint(x + barWidth + z, baseY - barheight - z);
            
            g.fillPolygon(sideFace);
            g.setColor(colorSideFace);
            
        }
        
        // Draw horizontal axis labels
        int axisLabelX = baseX - 5;
        int axisLabelY = baseY + 20;
        g.setColor(Color.black);
        
        g.drawString("Label 1", axisLabelX, axisLabelY);
        g.drawString("Label 2", axisLabelX + barWidth + barSpacing, axisLabelY);
        g.drawString("Label 3", axisLabelX + 2 * (barWidth + barSpacing), axisLabelY);
        g.drawString("Label 4", axisLabelX + 3 * (barWidth + barSpacing), axisLabelY);
        g.drawString("Label 5", axisLabelX + 4 * (barWidth + barSpacing), axisLabelY);
        
        // Draw vertical axis labels
        int numTicks = 5;
        int tickSpacing = (baseY - 50) / numTicks;
        g.drawString("0", axisLabelX - 20, baseY - 5);
        
        for(int i = 1; i <= numTicks; i++)
        {
            int tickValue = 40 + i * 40;
            g.drawString(Integer.toString(tickValue), axisLabelX-30, baseY-i*tickSpacing);
        }
        
        g.drawString("", axisLabelX-60, height/2);
        
    }
    
}


The Final Result:






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








Share this

Related Posts

Previous
Next Post »