Project JAVA dengan GUI: Sistem Inventaris Sederhana untuk Toko Retail (Lengkap Langkah-Langkah)
Sistem inventaris adalah komponen penting dalam manajemen toko retail. Dengan sistem ini, pemilik toko dapat melacak stok barang, mencatat transaksi, dan mencegah kehilangan produk.
Dalam artikel ini, kita akan membangun Sistem Inventaris Sederhana menggunakan Java dengan GUI (Graphical User Interface). Project ini cocok untuk pemula yang ingin belajar pemrograman Java sekaligus memahami konsep manajemen data.
Fitur yang akan dibangun:
✔ Tambah, Edit, Hapus Barang
✔ Cari Barang berdasarkan Nama/Kode
✔ Update Stok Otomatis
✔ Antarmuka Pengguna yang Mudah
Apa Itu Sistem Inventaris?
Sistem inventaris adalah perangkat lunak yang membantu mengelola:
- Stok barang (jumlah, harga, kategori)
- Transaksi masuk/keluar
- Laporan penjualan
Dengan sistem ini, bisnis retail dapat berjalan lebih efisien dan terorganisir.
Langkah-Langkah Membuat Sistem Inventaris dengan Java GUI
1. Persiapan Tools
Pastikan Anda telah menginstal:
- Java Development Kit (JDK) 8+
- IDE (IntelliJ IDEA, Eclipse, atau NetBeans)
- Java Swing (untuk GUI)
2. Membuat Struktur Project
Buat project baru di IDE dengan struktur berikut:
📂 InventorySystem ├── 📄 Product.java (Class Model) ├── 📄 InventoryManager.java (Class Logic) └── 📄 MainApp.java (GUI Main Class)
3. Membuat Class Model (Product.java
)
public class Product { private String id; private String name; private double price; private int stock; // Constructor public Product(String id, String name, double price, int stock) { this.id = id; this.name = name; this.price = price; this.stock = stock; } // Getter & Setter public String getId() { return id; } public String getName() { return name; } public double getPrice() { return price; } public int getStock() { return stock; } public void setStock(int stock) { this.stock = stock; } }
4. Membuat Class Logic (InventoryManager.java
)
import java.util.ArrayList; import java.util.List; public class InventoryManager { private List<Product> products = new ArrayList<>(); // Tambah produk baru public void addProduct(Product product) { products.add(product); } // Hapus produk public boolean removeProduct(String id) { return products.removeIf(p -> p.getId().equals(id)); } // Cari produk public Product findProduct(String keyword) { return products.stream() .filter(p -> p.getId().equals(keyword) || p.getName().equalsIgnoreCase(keyword)) .findFirst() .orElse(null); } // Update stok public void updateStock(String id, int newStock) { Product product = findProduct(id); if (product != null) { product.setStock(newStock); } } // Dapatkan semua produk public List<Product> getAllProducts() { return products; } }
5. Membuat GUI (MainApp.java
)
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; public class MainApp extends JFrame { private InventoryManager manager = new InventoryManager(); private JTable table; private JTextField idField, nameField, priceField, stockField; public MainApp() { setTitle("Sistem Inventaris Toko Retail"); setSize(800, 500); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(new BorderLayout()); // Form Input JPanel inputPanel = new JPanel(new GridLayout(4, 2, 10, 10)); idField = new JTextField(); nameField = new JTextField(); priceField = new JTextField(); stockField = new JTextField(); inputPanel.add(new JLabel("Kode Barang:")); inputPanel.add(idField); inputPanel.add(new JLabel("Nama Barang:")); inputPanel.add(nameField); inputPanel.add(new JLabel("Harga:")); inputPanel.add(priceField); inputPanel.add(new JLabel("Stok:")); inputPanel.add(stockField); // Tombol Aksi JButton addButton = new JButton("Tambah"); JButton deleteButton = new JButton("Hapus"); JButton searchButton = new JButton("Cari"); JPanel buttonPanel = new JPanel(); buttonPanel.add(addButton); buttonPanel.add(deleteButton); buttonPanel.add(searchButton); // Tabel Data String[] columns = {"Kode", "Nama", "Harga", "Stok"}; table = new JTable(new Object[0][4], columns); JScrollPane scrollPane = new JScrollPane(table); // Layout add(inputPanel, BorderLayout.NORTH); add(scrollPane, BorderLayout.CENTER); add(buttonPanel, BorderLayout.SOUTH); // Event Listeners addButton.addActionListener(this::addProduct); deleteButton.addActionListener(this::deleteProduct); searchButton.addActionListener(this::searchProduct); } private void addProduct(ActionEvent e) { try { String id = idField.getText(); String name = nameField.getText(); double price = Double.parseDouble(priceField.getText()); int stock = Integer.parseInt(stockField.getText()); manager.addProduct(new Product(id, name, price, stock)); refreshTable(); JOptionPane.showMessageDialog(this, "Produk berhasil ditambahkan!"); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(this, "Input tidak valid!", "Error", JOptionPane.ERROR_MESSAGE); } } private void deleteProduct(ActionEvent e) { String id = JOptionPane.showInputDialog(this, "Masukkan Kode Barang:"); if (id != null && manager.removeProduct(id)) { refreshTable(); JOptionPane.showMessageDialog(this, "Produk dihapus!"); } else { JOptionPane.showMessageDialog(this, "Produk tidak ditemukan!", "Error", JOptionPane.ERROR_MESSAGE); } } private void searchProduct(ActionEvent e) { String keyword = JOptionPane.showInputDialog(this, "Cari (Kode/Nama):"); Product product = manager.findProduct(keyword); if (product != null) { JOptionPane.showMessageDialog(this, "Hasil Pencarian:\n" + "Kode: " + product.getId() + "\n" + "Nama: " + product.getName() + "\n" + "Harga: " + product.getPrice() + "\n" + "Stok: " + product.getStock()); } else { JOptionPane.showMessageDialog(this, "Produk tidak ditemukan!", "Error", JOptionPane.ERROR_MESSAGE); } } private void refreshTable() { List<Product> products = manager.getAllProducts(); Object[][] data = new Object[products.size()][4]; for (int i = 0; i < products.size(); i++) { Product p = products.get(i); data[i] = new Object[]{p.getId(), p.getName(), p.getPrice(), p.getStock()}; } table.setModel(new javax.swing.table.DefaultTableModel(data, new String[]{"Kode", "Nama", "Harga", "Stok"})); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new MainApp().setVisible(true)); } }
6. Menjalankan Program
- Compile & Run di IDE atau terminal:
javac MainApp.java java MainApp
- Fitur yang tersedia:
- Tambah produk baru
- Hapus produk
- Cari produk
- Lihat daftar stok
Pengembangan Lebih Lanjut
- Simpan data ke file/database (MySQL, SQLite).
- Tambahkan fitur transaksi penjualan.
- Buat laporan PDF menggunakan library seperti Apache PDFBox.
Kesimpulan
Dengan project ini, Anda telah belajar:
✅ Membuat CRUD (Create, Read, Update, Delete) di Java.
✅ Menggunakan Java Swing untuk GUI.
✅ Membangun sistem inventaris sederhana.
Siap digunakan untuk toko retail kecil! 🛒