📄 projectpanel.java~229~
字号:
package pcdiysystem.Panel;
import java.awt.*;
import javax.swing.*;
import java.util.Vector;
import pcdiysystem.Panel.TableModelOfCellDiseditable;
import pcdiysystem.Dao.DefaultProjectDAO;
import pcdiysystem.Panel.ProjectViewerPanel;
import pcdiysystem.Panel.illegalIndexException;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
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 java.awt.event.FocusEvent;
import java.awt.event.FocusAdapter;
import javax.swing.JOptionPane;
import java.util.Vector;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
/**
* <p>Title: 自助装机系统</p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author kamiiiyu
* @version 1.0
*/
public class ProjectPanel
extends JPanel {
BorderLayout borderLayout1 = new BorderLayout();
JPanel pnlTitle=new JPanel(new FlowLayout());
JPanel pnlBottom=new JPanel(new BorderLayout());
JPanel pnlBottomNorth=new JPanel(new FlowLayout());
JPanel pnlBottomCenter=new JPanel(new FlowLayout());
JPanel pnlBottomSouth=new JPanel(new FlowLayout());
JScrollPane scpProject=new JScrollPane();
JLabel lblTitle=new JLabel("装 机 方 案");
JLabel lblTotal=new JLabel("价格总计:");
JLabel lblTotalValue=new JLabel("¥0.00元");
JButton btnSubmisson=new JButton("提交方案");
JButton btnCheck=new JButton("查看");
JButton btnReload=new JButton("刷新");
JTextField txtProjectName=new JTextField("请为您的方案命名(可缺省)");
JTextField txtQuantity=new JTextField();
JComboBox cboCheck=new JComboBox();
ComponentListPanel pnlLeft;
JTable tabProjectData;
DefaultTableModel dataOfProject;
Vector selectedRecord=new Vector();
public ProjectPanel() {
try {
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
public ProjectPanel(ComponentListPanel pnlLeft) {
try {
this.pnlLeft=pnlLeft;
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setLayout(borderLayout1);
pnlTitle.add(lblTitle);
this.insertToCboCheck();
this.creatNewProjectTable();
txtProjectName.setColumns(20);
pnlBottomNorth.add(lblTotal);
pnlBottomNorth.add(lblTotalValue);
pnlBottomCenter.add(txtProjectName);
pnlBottomCenter.add(btnSubmisson);
pnlBottomSouth.add(cboCheck);
pnlBottomSouth.add(btnCheck);
pnlBottomSouth.add(btnReload);
pnlBottom.add(pnlBottomNorth,BorderLayout.NORTH);
pnlBottom.add(pnlBottomCenter,BorderLayout.CENTER);
pnlBottom.add(pnlBottomSouth,BorderLayout.SOUTH);
this.add(scpProject,BorderLayout.CENTER);
this.add(pnlTitle,BorderLayout.NORTH);
this.add(pnlBottom,BorderLayout.SOUTH);
tabProjectData.addMouseMotionListener(new ProjectPanel_tabProjectData_mouseMotionAdapter(this));
tabProjectData.addMouseListener(new ProjectPanel_tabProjectData_mouseAdapter(this));
txtProjectName.addMouseListener(new ProjectPanel_txtProjectName_mouseAdapter(this));
txtQuantity.addFocusListener(new ProjectPanel_txtQuantity_focusAdapter(this));
btnSubmisson.addActionListener(new ProjectPanel_btnSubmisson_actionAdapter(this));
btnReload.addActionListener(new ProjectPanel_btnReload_actionAdapter(this));
btnCheck.addActionListener(new ProjectPanel_btnCheck_actionAdapter(this));
cboCheck.addItemListener(new ProjectPanel_cboCheck_itemAdapter(this));
}
void creatNewProjectTable(){
Vector columnName=new Vector();
columnName.add("配件");columnName.add("型号");columnName.add("数量");columnName.add("单价");
int numberOfComponents=pnlLeft.cboComponents.getItemCount();
for(int i=0;i<numberOfComponents;i++){
Vector temp=new Vector();
temp.add(pnlLeft.cboComponents.getItemAt(i));
selectedRecord.add(temp);
}
dataOfProject=new TableModelOfProjectPanel();
//dataOfProject=new DefaultTableModel();
dataOfProject.setDataVector(selectedRecord,columnName);
tabProjectData=new JTable(dataOfProject);
tabProjectData.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tabProjectData.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(txtQuantity));
tabProjectData.getColumnModel().getColumn(1).setPreferredWidth(150);
tabProjectData.getColumnModel().getColumn(2).setPreferredWidth(45);
tabProjectData.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabProjectData.setDragEnabled(false);
tabProjectData.getTableHeader().setReorderingAllowed(false);
scpProject.getViewport().add(tabProjectData);
}
void creatNewProjectTable(Vector dataSource){
Vector columnName=new Vector();
columnName.add("配件");columnName.add("型号");columnName.add("数量");columnName.add("单价");
dataOfProject=new TableModelOfProjectPanel();
//dataOfProject=new DefaultTableModel();
dataOfProject.setDataVector(dataSource,columnName);
tabProjectData=new JTable(dataOfProject);
tabProjectData.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tabProjectData.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(txtQuantity));
tabProjectData.getColumnModel().getColumn(1).setPreferredWidth(150);
tabProjectData.getColumnModel().getColumn(2).setPreferredWidth(45);
tabProjectData.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabProjectData.setDragEnabled(false);
tabProjectData.getTableHeader().setReorderingAllowed(false);
scpProject.getViewport().add(tabProjectData);
}
/*已过时,数量大于1时结果与预期不符
void creatNewProjectTable(Vector dataFromPnlLeft){
Vector columnName=new Vector();
columnName.add("配件");columnName.add("数量");columnName.add("单价");columnName.add("型号");
dataOfProject=new TableModelOfCellDiseditable();
dataOfProject.setDataVector(dataFromPnlLeft,columnName);
tabProjectData=new JTable(dataOfProject);
tabProjectData.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
scpProject.getViewport().add(tabProjectData);
}
*/
void insertToCboCheck(){
cboCheck.removeAllItems();
DefaultProjectDAO dpd = new DefaultProjectDAO();
cboCheck.addItem("请选择希望查看的方案");
cboCheck.addItem("----------------");
Vector nameItem=dpd.getProjectName();
for(int i=0;i<nameItem.size();i++){
cboCheck.addItem(nameItem.get(i));
}
}
/*非三层结构,已过时
float calculateAndInsertData(){
try{
float total = 0;
for (int i = 0; i < tabProjectData.getRowCount(); i++) {
String pTemp = String.valueOf(tabProjectData.getValueAt(i, 3));
String qTemp = String.valueOf(tabProjectData.getValueAt(i, 2));
if (!pTemp.equals("null") && !qTemp.equals("null")) {
float price = Float.valueOf(pTemp.substring(1));
int quantity = Integer.valueOf(qTemp);
total += (price * quantity);
}
}
lblTotalValue.setText("¥" + String.valueOf(total) + "0元");
return total;
}catch(NumberFormatException ne){
JOptionPane.showMessageDialog(this,"请输入有效整数","出错啦!",JOptionPane.ERROR_MESSAGE);
}finally{
return -1f;
}
}
*/
public ProjectPanel returnCurrentObject(){
return this;
}
public void txtProjectName_mouseClicked(MouseEvent e) {
if(txtProjectName.getText().equals("请为您的方案命名(可缺省)"))
txtProjectName.selectAll();
}
public void tabProjectData_mouseMoved(MouseEvent e) {
tabProjectData.setToolTipText("双击“数量”单元格可修改数量");
}
public void txtQuantity_focusGained(FocusEvent e) {
}
public void txtQuantity_focusLost(FocusEvent e) {
//calculateAndInsertData();已过时,非三层结构
new DefaultProjectDAO(this).calculate();
}
public void btnSubmisson_actionPerformed(ActionEvent e) {
DefaultProjectDAO dpd = new DefaultProjectDAO();
TableModel tmTemp=this.tabProjectData.getModel();
if(!dpd.isTableEmpty(tmTemp)){
String idTemp = dpd.creatProjectId();
String projectName = txtProjectName.getText().trim();
String price = lblTotalValue.getText().substring(0,
lblTotalValue.getText().lastIndexOf("元"));
if (dpd.creatSQLTable(idTemp)) {
Object[] buttonText = {
"是的,不改了", "让我再想想"};
int index = JOptionPane.showOptionDialog(this, "您确定提交此方案吗?", "",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null,
buttonText, buttonText[0]);
if (index == 0) {
dpd.insertDataToProjectManagement(idTemp, projectName, price);
Vector dataSource = dpd.getDataFromTableMOdel(tmTemp);
dpd.insertDataToDefaultProject(dataSource, idTemp);
}
else {
dpd.dropSQLTable(idTemp);
}
}
}else{
JOptionPane.showMessageDialog(this,"好像没有数据哦!","无法提交方案",JOptionPane.ERROR_MESSAGE);
}
}
public void btnReload_actionPerformed(ActionEvent e) {
this.insertToCboCheck();
}
public void btnCheck_actionPerformed(ActionEvent e)throws illegalIndexException{
DefaultProjectDAO dpd=new DefaultProjectDAO(this);
try{
int index = cboCheck.getSelectedIndex();
if (index < 2) {
throw new illegalIndexException();
}
}catch (illegalIndexException iie) {
JOptionPane.showMessageDialog(this,"请选择方案!");
return;
}
String projectName=String.valueOf(cboCheck.getSelectedItem());
Vector dataSource=dpd.getProjectData(projectName);
this.creatNewProjectTable(dataSource);
dpd.getProjectCost(projectName);
}
public void cboCheck_itemStateChanged(ItemEvent e) {
}
public void tabProjectData_mouseClicked(MouseEvent e){
if(e.getClickCount()==2 && e.getButton()==e.BUTTON1){
try {
for (int i = 0; i < 3; i++) {
dataOfProject.setValueAt(null, pnlLeft.cboComponents.getSelectedIndex(),
i + 1);
dataOfProject.fireTableDataChanged();
}
new DefaultProjectDAO(this).calculate();
}
catch (NumberFormatException ne) {
JOptionPane.showMessageDialog(this, "没有可取消的项目!", "出错了!",
JOptionPane.ERROR_MESSAGE);
}
}
}
public JLabel getLblTotalValue(){
return this.lblTotalValue;
}
public JTable getTabProjectData(){
return this.tabProjectData;
}
}
class TableModelOfProjectPanel
extends DefaultTableModel{
public TableModelOfProjectPanel() {
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 2) { // 只有“数量”即第三列允许被编辑
return true;
}
return false;
}
}
class ProjectPanel_txtProjectName_mouseAdapter
extends MouseAdapter {
private ProjectPanel adaptee;
ProjectPanel_txtProjectName_mouseAdapter(ProjectPanel adaptee) {
this.adaptee = adaptee;
}
public void mouseClicked(MouseEvent e) {
adaptee.txtProjectName_mouseClicked(e);
}
}
class ProjectPanel_tabProjectData_mouseAdapter
extends MouseAdapter {
private ProjectPanel adaptee;
ProjectPanel_tabProjectData_mouseAdapter(ProjectPanel adaptee) {
this.adaptee = adaptee;
}
public void mouseClicked(MouseEvent e) {
adaptee.tabProjectData_mouseClicked(e);
}
}
class ProjectPanel_tabProjectData_mouseMotionAdapter
extends MouseMotionAdapter {
private ProjectPanel adaptee;
ProjectPanel_tabProjectData_mouseMotionAdapter(ProjectPanel adaptee) {
this.adaptee = adaptee;
}
public void mouseMoved(MouseEvent e) {
adaptee.tabProjectData_mouseMoved(e);
}
}
class ProjectPanel_txtQuantity_focusAdapter
extends FocusAdapter {
private ProjectPanel adaptee;
ProjectPanel_txtQuantity_focusAdapter(ProjectPanel adaptee) {
this.adaptee = adaptee;
}
public void focusLost(FocusEvent e) {
adaptee.txtQuantity_focusLost(e);
}
public void focusGained(FocusEvent e) {
adaptee.txtQuantity_focusGained(e);
}
}
class ProjectPanel_btnSubmisson_actionAdapter
implements ActionListener {
private ProjectPanel adaptee;
ProjectPanel_btnSubmisson_actionAdapter(ProjectPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnSubmisson_actionPerformed(e);
}
}
class ProjectPanel_btnReload_actionAdapter
implements ActionListener {
private ProjectPanel adaptee;
ProjectPanel_btnReload_actionAdapter(ProjectPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnReload_actionPerformed(e);
}
}
class ProjectPanel_btnCheck_actionAdapter
implements ActionListener{
private ProjectPanel adaptee;
ProjectPanel_btnCheck_actionAdapter(ProjectPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e){
try{
adaptee.btnCheck_actionPerformed(e);
}catch(illegalIndexException iie){
}
}
}
class ProjectPanel_cboCheck_itemAdapter
implements ItemListener {
private ProjectPanel adaptee;
ProjectPanel_cboCheck_itemAdapter(ProjectPanel adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.cboCheck_itemStateChanged(e);
}
}
class illegalIndexException
extends Exception{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -