Created
August 16, 2017 00:22
-
-
Save antosamalona/7d0078da28c295ec993f861d3b3668c0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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