Skip to content

Instantly share code, notes, and snippets.

@antosamalona
Created August 16, 2017 00:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save antosamalona/7d0078da28c295ec993f861d3b3668c0 to your computer and use it in GitHub Desktop.
Save antosamalona/7d0078da28c295ec993f861d3b3668c0 to your computer and use it in GitHub Desktop.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package id.ardev.resto.view;
import id.ardev.resto.controller.CategoryController;
import id.ardev.resto.controller.ProductController;
import id.ardev.resto.database.DatabaseMySQL;
import id.ardev.resto.model.Category;
import id.ardev.resto.model.CrudState;
import id.ardev.resto.model.Product;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.List;
import java.util.Locale;
import java.util.Observable;
import java.util.Observer;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
/**
*
* @author AryaDharmaadi
*/
public class ProductFrame extends javax.swing.JFrame implements Observer{
private ProductController productController = new ProductController();
private CategoryController categoryController = new CategoryController();
/**
* Creates new form NewProductFrame
*/
public ProductFrame() {
initComponents();
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
productController.addObserver(this);
setCategory(categoryController.getAllData());
setProductTable(productController.getAllProduct());
if (!DatabaseMySQL.isConnect()){
System.exit(0);
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jLabel7 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
name_txtfield = new javax.swing.JTextField();
stock_txtfield = new javax.swing.JTextField();
price_txtfield = new javax.swing.JTextField();
category_combobox = new javax.swing.JComboBox();
isFavorite_checkbox = new javax.swing.JCheckBox();
save_button = new javax.swing.JButton();
jSeparator1 = new javax.swing.JSeparator();
jLabel8 = new javax.swing.JLabel();
jScrollPane2 = new javax.swing.JScrollPane();
product_table = new javax.swing.JTable();
jLabel7.setText("jLabel7");
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable1);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("Tambah Produk");
jLabel2.setText("Nama Produk");
jLabel3.setText("Harga");
jLabel4.setText("Stok");
jLabel5.setText("Kategori");
category_combobox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
isFavorite_checkbox.setText("Produk Favorit");
save_button.setText("Simpan");
save_button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
save_buttonActionPerformed(evt);
}
});
jLabel8.setText("Daftar Produk");
product_table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
}
));
jScrollPane2.setViewportView(product_table);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jSeparator1))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jLabel3)
.addComponent(jLabel4)
.addComponent(jLabel5)
.addComponent(jLabel6))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(28, 28, 28)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(isFavorite_checkbox)
.addComponent(category_combobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(name_txtfield, javax.swing.GroupLayout.PREFERRED_SIZE, 223, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(price_txtfield, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(stock_txtfield, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addGap(16, 16, 16)
.addComponent(jLabel1))))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(save_button)
.addGap(11, 11, 11))))
.addGroup(layout.createSequentialGroup()
.addGap(139, 139, 139)
.addComponent(jLabel8))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 326, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(name_txtfield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(price_txtfield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(stock_txtfield, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(category_combobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(isFavorite_checkbox)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(17, 17, 17)
.addComponent(jLabel6))
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(save_button)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 188, Short.MAX_VALUE)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void save_buttonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_save_buttonActionPerformed
String name = name_txtfield.getText();
float price = Float.valueOf(price_txtfield.getText());
int stock = Integer.parseInt(stock_txtfield.getText());
Category category = (Category) category_combobox.getSelectedItem();
boolean isFavorite = isFavorite_checkbox.isSelected();
Product p = new Product(null, name, price, stock, category, isFavorite);
productController.manipulate(p,CrudState.INSERT);
}//GEN-LAST:event_save_buttonActionPerformed
@Override
public void update(Observable o, Object arg) {
if (o==productController){
if (arg==null){
JOptionPane.showMessageDialog(this, "Produk gagal diperbaharui karena kegagalan koneksi ke database");
}else{
Product p = (Product) arg;
if (productController.getCrudState() == CrudState.INSERT){
JOptionPane.showMessageDialog(this, p.getName()+" berhasil ditambahkan");
}
setProductTable(productController.getAllProduct());
resetForm();
}
}
}
private String getFormattedPrice(Float value){
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.getDefault());
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator('.');
symbols.setMonetaryDecimalSeparator(',');
formatter.setDecimalFormatSymbols(symbols);
return "Rp "+formatter.format(value);
// return NumberFormat.getIntegerInstance(getLocale()).format(value);
}
private void resetForm(){
name_txtfield.setText(null);
price_txtfield.setText(null);
stock_txtfield.setText(null);
isFavorite_checkbox.setSelected(false);
}
private void setProductTable(List<Product> listProduct) {
if (listProduct==null){
JOptionPane.showMessageDialog(this, "Data produk gagal diambil dari database","DATABASE FAILED",JOptionPane.ERROR_MESSAGE);
}else{
DefaultTableModel tableModel = new DefaultTableModel();
tableModel.setColumnIdentifiers(
new String[] {
"Nama Produk",
"Harga",
"Stok",
"Kategori"
}
);
for (Product p : listProduct) {
Object[] o = new Object[4];
o[0] = p.getName();
o[1] = getFormattedPrice(p.getPrice());
o[2] = p.getStock();
o[3] = p.getCategory().getName();
tableModel.addRow(o);
}
product_table.setAutoResizeMode( javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS );
product_table.setModel(tableModel);
product_table.getColumnModel().getColumn(0).setMinWidth(120);
product_table.getColumnModel().getColumn(2).setMaxWidth(50);
}
}
private void setCategory(List<Category> categories){
if (categories==null){
JOptionPane.showMessageDialog(this, "Data kategori gagal diambil dari database","DATABASE FAILED",JOptionPane.ERROR_MESSAGE);
}else{
category_combobox.setModel(new DefaultComboBoxModel(categories.toArray()));
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JComboBox category_combobox;
private javax.swing.JCheckBox isFavorite_checkbox;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTable jTable1;
private javax.swing.JTextField name_txtfield;
private javax.swing.JTextField price_txtfield;
private javax.swing.JTable product_table;
private javax.swing.JButton save_button;
private javax.swing.JTextField stock_txtfield;
// End of variables declaration//GEN-END:variables
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment