Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на Java часть 2

.pdf
Скачиваний:
134
Добавлен:
16.03.2016
Размер:
3.07 Mб
Скачать

import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.sql.ResultSet;

import java.sql.SQLException; import javax.swing.*;

public class RegistrationFrame extends JFrame {

private JPanel panel;

private JLabel labelLogin, labelPass; private JTextField tfLogin, tfPass; private JButton enter, registration; private DB db;

public RegistrationFrame(DB db) { this.db = db;

setSize(250, 230); setTitle("RegistrationFrame"); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); initComponents();

action();

setResizable(false);

setVisible(true);

}

private void initComponents() { panel = new JPanel();

labelLogin = new JLabel("Login"); labelPass = new JLabel("Password"); tfLogin = new JTextField(20); tfPass = new JTextField(20);

registration = new JButton("Registration"); panel.add(labelLogin); panel.add(tfLogin);

panel.add(labelPass);

panel.add(tfPass);

panel.add(registration);

add(panel);

}

private void action() {

141

registration.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) { if (tfLogin.getText().equals("")

|| tfPass.getText().equals("")) { JOptionPane.showMessageDialog(panel,

"Incorrect login or password", "Error", JOptionPane.ERROR_MESSAGE);

}else { try {

ResultSet rs = db.query("select * from users "

+"where login='" + tfLogin.getText() + "'"); if (rs.next()) {

JOptionPane.showMessageDialog(panel, "This username is not available", "Error", JOptionPane.ERROR_MESSAGE);

} else {

DaoUsers daoUser = new DaoUsers(db); try {

daoUser.insert(new Users(tfLogin.getText(), tfPass.getText(), 1, 0, 0, 0));

JOptionPane.showMessageDialog(panel, "Registration successful!", "Message", JOptionPane.INFORMATION_MESSAGE);

new LoginFrame(db); dispose();

}catch (NoSuchAlgorithmException ex) {

}catch (UnsupportedEncodingException ex) {

}

} catch (SQLException ex) { JOptionPane.showMessageDialog(panel, "Error accessing"

+ " database \n" + ex, "Error", JOptionPane.ERROR_MESSAGE);

}

}

}

});

}

}

После регистрации можно войти в систему, как пользователь(UserFrame)

142

В UserFrame выводятся все товары из базы данных, которые хранятся в таблице Goods. Для каждого товара создан отдельный класс ShopItem. С помощью ShopItem все товары выводятся на UserFrame.

Листинг 4.9

package by.belhard.user_interface;

import by.belhard.entity.Goods; import java.awt.*;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JCheckBox; import javax.swing.JLabel;

import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.JTextArea;

import javax.swing.SpinnerNumberModel;

public class ShopItem extends JPanel {

private JCheckBox jCheckBox1; private JLabel jLabel1;

private JLabel jLabel2; private JLabel jLabel3;

private JScrollPane jScrollPane1; private JSpinner jSpinner1; private JTextArea jTextArea1; private Goods currentGood;

public ShopItem(Goods good, int y) { this.currentGood = good; initComponents();

setBounds(10, y, 570, 164); setBorder(BorderFactory.createLineBorder(Color.black)); action();

setVisible(true);

}

private void initComponents() {

143

jCheckBox1 = new JCheckBox();

SpinnerNumberModel model1 = new SpinnerNumberModel(1, 1, 10, 1); jSpinner1 = new JSpinner(model1);

ImageIcon image = new ImageIcon(System.getProperties().getProperty("user.dir").replaceAll("\\\\", "\\/") + "/images/"+this.currentGood.getImagePath());

jLabel1 = new JLabel();

jLabel1.setIcon(new ImageIcon(image.getImage(). getScaledInstance(120, 120,

image.getImage().SCALE_DEFAULT))); jLabel2 = new JLabel(); jLabel3 = new JLabel();

jScrollPane1 = new JScrollPane(); jTextArea1 = new JTextArea(); jSpinner1.setEnabled(false); jScrollPane1.setHorizontalScrollBarPolicy(

JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jScrollPane1.setVerticalScrollBarPolicy(

JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

jLabel1.setMaximumSize(new Dimension(120, 120));

jLabel2.setText(this.currentGood.getName());

jLabel3.setText(String.valueOf(this.currentGood.getPrice()) + "$"); jTextArea1.setText(this.currentGood.getDescription());

jScrollPane1.setEnabled(false);

jTextArea1.setColumns(20);

jTextArea1.setEditable(false);

jTextArea1.setRows(5);

jScrollPane1.setViewportView(jTextArea1);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(39, 39, 39)

.addComponent(jCheckBox1)

.addGap(27, 27, 27)

.addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE,

144

50, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(42, 42, 42)

.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE,

120, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(29, 29, 29)

.addGroup(layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jLabel2)

.addComponent(jLabel3)

.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE))

.addContainerGap())

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,

layout.createSequentialGroup()

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE,

120, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(30, 30, 30))

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,

layout.createSequentialGroup()

.addGap(22, 22, 22)

.addComponent(jLabel2)

.addGap(18, 18, 18)

.addComponent(jLabel3)

.addPreferredGap(

javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addGroup(layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(0, 3, Short.MAX_VALUE)

.addGroup(layout.createParallelGroup(

javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jSpinner1,

145

javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jCheckBox1))

.addGap(64, 64, 64))

.addGroup(layout.createSequentialGroup()

.addComponent(jScrollPane1)

.addContainerGap())))

);

}

public void action() { jCheckBox1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) { jSpinner1.setEnabled(jSpinner1.isEnabled() ? false : true);

}

});

}

public boolean isChoosen() {

if (jCheckBox1.isSelected()) { return true;

}

return false;

}

public int getAmount() {

return (Integer) jSpinner1.getValue();

}

public Goods getCurrentItem() { return this.currentGood;

}

}

package by.belhard.user_interface;

import by.belhard.dao.DaoGoods; import by.belhard.dao.DaoOrders; import by.belhard.dao.DaoUsers; import by.belhard.entity.Goods;

146

import by.belhard.entity.Orders; import by.belhard.entity.Users; import by.belhard.mysql.DB; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.sql.SQLException; import java.util.ArrayList;

import java.util.HashMap; import java.util.Map.Entry; import javax.swing.*;

public class UserFrame extends JFrame {

private DB db; private JPanel panel;

private JScrollBar scroll; private MyTable tableUser;

private JButton deleteUser, addUser; private KeyAdapter key;

private JPanel itemList; private JScrollPane scrollPane; private JButton logout;

private JPanel userInfo; private JButton order; private LoginFrame login;

private ArrayList<ShopItem> goodsList; private Users currentUser;

private JLabel balancelabel;

public UserFrame(DB db, Users user, LoginFrame login) { this.goodsList = new ArrayList<ShopItem>();

this.db = db; this.login = login;

this.currentUser = user; setSize(600, 600); setTitle("UserFrame"); setLayout(new BorderLayout()); setLocationRelativeTo(null);

setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.userInfo = new JPanel();

this.userInfo.add(new JLabel("Hello, "));

147

this.balancelabel = new JLabel("" + user.getBalance() + "$ "); this.userInfo.add(new JLabel(user.getLogin() + "! ")); this.userInfo.add(new JLabel("Balance: ")); this.userInfo.add(balancelabel);

this.logout = new JButton("LogOut"); this.logout.setSize(100, 100); this.userInfo.add(this.logout); add(this.userInfo, BorderLayout.NORTH);

DaoGoods daoGoods = new DaoGoods(db); ArrayList<Goods> goods = null;

int position = 100; try {

goods = daoGoods.selectAll();

}catch (SQLException ex) { System.out.println(ex);

}

this.itemList = new JPanel(new GridLayout(goods.size(), 1)); this.itemList.setPreferredSize(new Dimension(500, goods.size() * 200)); for (Goods i : goods) {

ShopItem tmp = new ShopItem(i, position); this.itemList.add(tmp); this.goodsList.add(tmp);

}

this.scrollPane = new JScrollPane(this.itemList); this.scrollPane.getVerticalScrollBar().setUnitIncrement(10); add(this.scrollPane, BorderLayout.CENTER);

this.order = new JButton("Order"); this.order.setSize(100, 100); add(this.order, BorderLayout.SOUTH); setVisible(true); //прорисовка actions();

}

public void actions() { this.logout.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) { dispose();

login.setVisible(true);

}

});

this.order.addActionListener(new ActionListener() {

148

@Override

public void actionPerformed(ActionEvent e) {

HashMap<Goods, Integer> choosenGoods = new HashMap<Goods, Integer>();

int totalcost = 0;

for (ShopItem shopItem : goodsList) { if (shopItem.isChoosen()) {

choosenGoods.put(shopItem.getCurrentItem(),

shopItem.getAmount());

totalcost += shopItem.getCurrentItem().getPrice() * shopItem.getAmount();

}

}

if (currentUser.getBalance() >= totalcost) { int lastInsertID = 0;

try {

new DaoOrders(db).insert(new Orders(currentUser.getUsers_id(), "processing", 0, totalcost));

lastInsertID = new DaoOrders(db).getLastInsertId(); } catch (SQLException ex) {

}

StringBuilder sb = new StringBuilder("INSERT INTO goods_in_orders VALUES ");

for (Entry<Goods, Integer> entry : choosenGoods.entrySet()) { sb.append("('" + lastInsertID + "','" +

entry.getKey().getGoods_id() + "','" + entry.getValue() + "'),");

}

String result = sb.toString(); try {

db.update(result.substring(0, result.length() - 1)); balancelabel.setText("" + (currentUser.getBalance() - totalcost)

+ "$ ");

currentUser.setBalance(currentUser.getBalance() - totalcost); new DaoUsers(db).updateBalance(currentUser); JOptionPane.showMessageDialog(null, "Total Cost: " +

totalcost, "Success order", 1);

} catch (SQLException ex) {

}

} else {

JOptionPane.showMessageDialog(null, "Total Cost " + totalcost + " more than your balance", "Fail order", 1);

}

}

});

}

149

}

Администратор видит все таблицы и может редактировать данные и пользователя и информацию про товары. Может добавить нового пользователя или новый товар. Видит детализацию любого заказа и меняет статус заказа.

Т.к. в AdminFrame будет вывод различных таблиц, которые строятся одинаково с помощью класса MyTable по различным запросам, сделаем абстрактный класс TablePanel, в котором будет создание панели с таблицей. Класс MyTable создает объект класса JTable по переданному в конструктор объекту класса ResultSet.

Листинг 4.10

package by.belhard.user_interface;

import com.mysql.jdbc.ResultSetMetaData; import java.sql.ResultSet;

import java.sql.SQLException; import java.util.Vector; import java.util.logging.Level;

import java.util.logging.Logger; import javax.swing.JTable;

import javax.swing.table.DefaultTableModel; import by.belhard.mysql.DB;

public class MyTable extends JTable {

private DefaultTableModel model;

public DefaultTableModel getModel() { return model;

}

public MyTable(ResultSet rs) { model = new DefaultTableModel(); try {

ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData(); for (int i = 1; i <= rsmd.getColumnCount(); i++) {

model.addColumn(rsmd.getColumnName(i));

}

while (rs.next()) {

Vector v = new Vector();

for (int i = 1; i <= rsmd.getColumnCount(); i++) {

150