📄 componentlistpanel.java~166~
字号:
package pcdiysystem.Panel;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.BorderLayout;
import java.util.Vector;
import pcdiysystem.Dao.ProcessorsDAO;
import pcdiysystem.Dao.MotherboardsDAO;
import pcdiysystem.Dao.ManuOfMotDAO;
import pcdiysystem.Dao.ManuOfProDAO;
import java.awt.Font;
import pcdiysystem.Panel.DIYPanel;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.table.TableColumn;
import javax.swing.table.JTableHeader;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionAdapter;
import pcdiysystem.Dao.DefaultProjectDAO;
/**
* <p>Title: 自助装机系统</p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author kamiiiyu
* @version 1.0
*/
public class ComponentListPanel
extends JPanel {
BorderLayout borderLayout1 = new BorderLayout();
JScrollPane scpListOfComponent = new JScrollPane();
JPanel pnlTitle = new JPanel(new GridLayout(1, 4));
JPanel pnlBottom = new JPanel(new FlowLayout());
JPanel pnlBottomContainer = new JPanel(new BorderLayout());
JTextArea txtDetail = new JTextArea(5, 50);
JButton btnSelect = new JButton("选用");
JButton btnCancel = new JButton("取消");
JLabel lblComponents = new JLabel("电脑配件");
JLabel lblManufacturer = new JLabel("品牌");
JComboBox cboComponents = new JComboBox();
JComboBox cboManufacturer = new JComboBox();
JTable tabComData;
DefaultTableModel dtComponent;
DefaultTableModel dtCellDisEditable;
Vector selectedRecord;
ProjectPanel pnlRight;
public ComponentListPanel() {
try {
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
public ComponentListPanel(ProjectPanel pnlRight) {
try {
this.pnlRight = pnlRight;
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setLayout(borderLayout1);
txtDetail.setEditable(false);
lblComponents.setFont(new java.awt.Font("宋体", Font.BOLD, 15));
lblComponents.setText("电 脑 配 件:");
lblManufacturer.setFont(new java.awt.Font("宋体", Font.BOLD, 15));
lblManufacturer.setText(" 品 牌:");
this.insertToCboComponents();
this.inserToCboManufacturer();
cboComponents.addItemListener(new
ComponentListPanel_cboComponents_itemAdapter(this));
cboManufacturer.addItemListener(new
ComponentListPanel_cboManufacturer_itemAdapter(this));
btnSelect.addActionListener(new ComponentListPanel_btnSelect_actionAdapter(this));
btnCancel.addActionListener(new ComponentListPanel_btnCancel_actionAdapter(this));
pnlTitle.add(lblComponents);
pnlTitle.add(cboComponents);
pnlTitle.add(lblManufacturer);
pnlTitle.add(cboManufacturer);
pnlBottom.add(btnSelect);
pnlBottom.add(btnCancel);
pnlBottomContainer.add(pnlBottom, BorderLayout.CENTER);
pnlBottomContainer.add(txtDetail, BorderLayout.NORTH);
pnlBottomContainer.add(new JLabel("硬件细节"), BorderLayout.WEST);
this.add(pnlBottomContainer, BorderLayout.SOUTH);
this.creatNewComponentTable("Intel");
this.add(scpListOfComponent, java.awt.BorderLayout.CENTER);
this.add(pnlTitle, java.awt.BorderLayout.NORTH);
}
public void insertToCboComponents() {
cboComponents.addItem("CPU");
cboComponents.addItem("散热系统");
cboComponents.addItem("主板");
cboComponents.addItem("内存");
cboComponents.addItem("硬盘");
cboComponents.addItem("显卡");
cboComponents.addItem("声卡");
cboComponents.addItem("光驱");
cboComponents.addItem("显示器");
cboComponents.addItem("鼠标");
cboComponents.addItem("键盘");
cboComponents.addItem("机箱");
cboComponents.addItem("PC电源");
cboComponents.addItem("音箱");
cboComponents.setSelectedIndex(0);
}
public ComponentListPanel getCurrentObject() {
return this;
}
public void inserToCboManufacturer() {
cboManufacturer.removeAllItems();
int index = cboComponents.getSelectedIndex();
switch (index) {
case 0: {
Vector temp = (new ManuOfProDAO()).getManufacturer();
for (int i = 0; i < temp.size(); i++) {
cboManufacturer.addItem(temp.get(i));
}
break;
}
case 1: {
break;
}
case 2: {
Vector temp = (new ManuOfMotDAO()).getManufacturer();
for (int i = 0; i < temp.size(); i++) {
cboManufacturer.addItem(temp.get(i));
}
break;
}
}
}
void creatNewComponentTable(String manufacturer) {
int index = cboComponents.getSelectedIndex();
Vector colName = new Vector();
Vector cellData = new Vector();
switch (index) {
case 0:
ProcessorsDAO pd = new ProcessorsDAO();
cellData = pd.getBaseInfomation(manufacturer);
colName.add("型号");
colName.add("主频");
colName.add("前端总线");
colName.add("接口类型");
colName.add("库存");
colName.add("价格");
break;
case 1: {
break;
}
case 2: {
MotherboardsDAO md = new MotherboardsDAO();
cellData = md.getBaseInfomation(manufacturer,
MotherboardsDAO.COMPONENTLISTPANEL);
colName.add("型号");
colName.add("CPU插槽类型");
colName.add("北桥芯片");
colName.add("支持CPU类型");
colName.add("支持显卡标准");
colName.add("硬件描述");
colName.add("库存");
colName.add("价格");
}
}
/*
dtComponent=new DefaultTableModel(cellData,colName);
tabComData=new JTable(dtComponent);
*/
//构造可编辑单元格的表格
dtCellDisEditable = new TableModelOfCellDiseditable();
dtCellDisEditable.setDataVector(cellData, colName);
tabComData = new JTable(dtCellDisEditable);
tabComData.addMouseMotionListener(new
ComponentListPanel_tabComData_mouseMotionAdapter(this));
tabComData.addMouseListener(new ComponentListPanel_tabComData_mouseAdapter(this));
for (int i = 0; i < colName.size(); i++) {
tabComData.getColumnModel().getColumn(i).setPreferredWidth(150);
}
tabComData.getColumnModel().getColumn(3).setPreferredWidth(200);
tabComData.setAutoResizeMode(tabComData.AUTO_RESIZE_OFF);
tabComData.setDragEnabled(false);
tabComData.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabComData.setRowSelectionInterval(0, 0);
tabComData.getTableHeader().setReorderingAllowed(false);
scpListOfComponent.getViewport().add(tabComData);
}
/*已过时
String calculate(int componentIndex,float pricePlus,int quantity){
total=Float.valueOf(pnlRight.lblTotalValue.getText().substring(1,5));
switch(componentIndex){
case 0:
total-=(priceOfComponent[0]*quantity);
priceOfComponent[0]=pricePlus;
total+=(priceOfComponent[0]*quantity);
break;
case 1:
total-=(priceOfComponent[1]*quantity);
priceOfComponent[1]=pricePlus;
total+=(priceOfComponent[1]*quantity);
break;
case 2:
total-=(priceOfComponent[2]*quantity);
priceOfComponent[2]=pricePlus;
total+=(priceOfComponent[2]*quantity);
break;
}
return String.valueOf(total);
}
*/
public void cboComponents_itemStateChanged(ItemEvent itemEvent) {
this.inserToCboManufacturer();
}
public void cboManufacturer_itemStateChanged(ItemEvent e) {
if (cboManufacturer.getItemCount() != 0) {
this.creatNewComponentTable(String.valueOf(cboManufacturer.
getSelectedItem()));
}
}
public void btnSelect_actionPerformed(ActionEvent e) {
/*
Vector temp=new Vector();
int rowIndex=this.tabComData.getSelectedRow();
int lastColumnIndex=this.tabComData.getColumnCount()-1;
temp.add(cboComponents.getSelectedItem());
temp.add(this.tabComData.getValueAt(rowIndex,0));
temp.add(new Integer(1));
temp.add(this.tabComData.getValueAt(rowIndex,lastColumnIndex));
selectedRecord.add(temp);
pnlRight.creatNewProjectTable(selectedRecord);
*/
//每次重新绘制右表
/*
float pricePlus=Float.parseFloat(String.valueOf(this.tabComData.getValueAt(rowIndex,lastColumnIndex)).substring(1));
int componentIndex=cboComponents.getSelectedIndex();
int quantity=Integer.valueOf(String.valueOf(pnlRight.tabProjectData.getValueAt(pnlRight.focusOfRow,2)));
System.out.println(quantity);
//String temp=this.calculate(componentIndex,pricePlus,quantity);
String temp=String.valueOf(pnlRight.calculate());
pnlRight.lblTotalValue.setText("¥"+temp+"0元");
*/
//pnlRight.calculateAndInsertData();
selectedRecord = new Vector();
int rowIndex = this.tabComData.getSelectedRow();
int lastColumnIndex = this.tabComData.getColumnCount() - 1;
selectedRecord.add(0, this.tabComData.getValueAt(rowIndex, 0));
selectedRecord.add(1, new Integer(1));
selectedRecord.add(2, this.tabComData.getValueAt(rowIndex, lastColumnIndex));
for (int i = 0; i < 3; i++) {
pnlRight.dataOfProject.setValueAt(selectedRecord.get(i),
cboComponents.getSelectedIndex(), i + 1);
}
new DefaultProjectDAO(pnlRight).calculate();
}
public void btnCancel_actionPerformed(ActionEvent e) {
/*//已过时,数量大于1时结果与预期不符
int lastColumnIndex = pnlRight.tabProjectData.getColumnCount() - 1;
int componentIndex = cboComponents.getSelectedIndex();
float priceMinus = Float.parseFloat(String.valueOf(pnlRight.tabProjectData.
getValueAt(componentIndex, lastColumnIndex)).substring(1));
String temp = String.valueOf(total - priceMinus);
pnlRight.lblTotalValue.setText("¥" + temp + "0元");
System.out.println(pnlRight.tabProjectData.getValueAt(componentIndex,
lastColumnIndex));*/
try {
for (int i = 0; i < 3; i++) {
pnlRight.dataOfProject.setValueAt(null, cboComponents.getSelectedIndex(),
i + 1);
}
new DefaultProjectDAO(pnlRight).calculate();
}
catch (NumberFormatException ne) {
JOptionPane.showMessageDialog(this, "没有可取消的项目!", "出错了!",
JOptionPane.ERROR_MESSAGE);
}
}
public void tabComData_mouseMoved(MouseEvent e) {
int rowIndex = this.tabComData.getSelectedRow();
int lastColumnIndex = this.tabComData.getColumnCount() - 1;
tabComData.setToolTipText("价格:" +
this.tabComData.getValueAt(rowIndex, lastColumnIndex));
}
public void tabComData_mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2 && e.getButton() == e.BUTTON1) {
selectedRecord = new Vector();
int rowIndex = this.tabComData.getSelectedRow();
int lastColumnIndex = this.tabComData.getColumnCount() - 1;
selectedRecord.add(0, this.tabComData.getValueAt(rowIndex, 0));
selectedRecord.add(1, new Integer(1));
selectedRecord.add(2,
this.tabComData.getValueAt(rowIndex, lastColumnIndex));
for (int i = 0; i < 3; i++) {
pnlRight.dataOfProject.setValueAt(selectedRecord.get(i),
cboComponents.getSelectedIndex(),
i + 1);
}
new DefaultProjectDAO(pnlRight).calculate();
}
else if (e.getClickCount() == 1 && e.getButton() == e.BUTTON1) {
int row = tabComData.getSelectedRow();
String text = String.valueOf(tabComData.getValueAt(row, 5));
String[] words = text.split("/");
txtDetail.setText("");
for (int i = 0; i < words.length; i++) {
txtDetail.append(words[i] + "\n");
}
}
}
}
class ComponentListPanel_tabComData_mouseMotionAdapter
extends MouseMotionAdapter {
private ComponentListPanel adaptee;
ComponentListPanel_tabComData_mouseMotionAdapter(ComponentListPanel adaptee) {
this.adaptee = adaptee;
}
public void mouseMoved(MouseEvent e) {
adaptee.tabComData_mouseMoved(e);
}
}
class ComponentListPanel_tabComData_mouseAdapter
extends MouseAdapter {
private ComponentListPanel adaptee;
ComponentListPanel_tabComData_mouseAdapter(ComponentListPanel adaptee) {
this.adaptee = adaptee;
}
public void mouseClicked(MouseEvent e) {
adaptee.tabComData_mouseClicked(e);
}
}
class TableModelOfCellDiseditable
extends DefaultTableModel {
public TableModelOfCellDiseditable() {
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
/*
if (columnIndex == 0) { // 序列号不能修改
return false;
}
if(rowIndex < 5){ // 前5行不能修改
return false;
}
return true;
}
*/
return false; //所有单元格不允许编辑
}
}
class ComponentListPanel_btnCancel_actionAdapter
implements ActionListener {
private ComponentListPanel adaptee;
ComponentListPanel_btnCancel_actionAdapter(ComponentListPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnCancel_actionPerformed(e);
}
}
class ComponentListPanel_cboManufacturer_itemAdapter
implements ItemListener {
private ComponentListPanel adaptee;
ComponentListPanel_cboManufacturer_itemAdapter(ComponentListPanel adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.cboManufacturer_itemStateChanged(e);
}
}
class ComponentListPanel_btnSelect_actionAdapter
implements ActionListener {
private ComponentListPanel adaptee;
ComponentListPanel_btnSelect_actionAdapter(ComponentListPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnSelect_actionPerformed(e);
}
}
class ComponentListPanel_cboComponents_itemAdapter
implements ItemListener {
private ComponentListPanel adaptee;
ComponentListPanel_cboComponents_itemAdapter(ComponentListPanel adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent itemEvent) {
adaptee.cboComponents_itemStateChanged(itemEvent);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -