您现在的位置是:首页-> 米鼠技术 ->在JTable的第一列前面加上JCheckBox,任选两行进行处理的方法

在JTable的第一列前面加上JCheckBox,任选两行进行处理的方法

package Manager.material;

import javax.swing.*;
import java.awt.*;
import com.borland.jbcl.layout.*;
import javax.swing.border.*;
import java.sql.*;
import java.util.Vector;
import javax.swing.table.*;
import java.awt.event.*;
import Manager.*;
/**
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: Buptsse</p>
* @author Gong haiping
* @version 1.0
*/

public class productAnalyse extends JFrame{
DBManager db=new DBManager();
ResultSet rs;
JLabel jLabel1 = new JLabel();
XYLayout xYLayout1 = new XYLayout();
TitledBorder titledBorder1;
TitledBorder titledBorder2;
JScrollPane jScrollPane1 = new JScrollPane();
TitledBorder titledBorder3;
//定义DefaultTableModel模型
  //DefaultTableModel model =new DefaultTableModel();
TableData m_data = new TableData();
JLabel jLabel2 = new JLabel();
JButton jButton1 = new JButton();
private String employee;
int j=0;
private int[] a=new int[2];
JComboBox jComboBox1 = new JComboBox();
  //定义JTable为DefaultTableModel的实例model模式
//JCheckBox jCheckBox=new JCheckBox();
public productAnalyse() throws HeadlessException {
  try {
    jbInit();
  }
  catch(Exception e) {
    e.printStackTrace();
  }
}
private void jbInit() throws Exception {
  titledBorder1 = new TitledBorder("");
  titledBorder2 = new TitledBorder("");
  titledBorder3 = new TitledBorder("");
  jLabel1.setFont(new java.awt.Font("Dialog", 0, 16));
  jLabel1.setBorder(titledBorder2);
  jLabel1.setText("请选择任两个盘库记录来进行盘库分析");


  JTable jTable1 = new JTable(m_data);
  jTable1.setAutoCreateColumnsFromModel(false);
  jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  JTableHeader header = jTable1.getTableHeader();
  header.setUpdateTableInRealTime(false);

  TableCellRenderer renderer = new CheckCellRenderer();
  TableCellEditor editor = new CheckBoxCellEditor();
  TableColumn column1 = new TableColumn(0,10,renderer, editor);
  jTable1.addColumn(column1);

  renderer = new DefaultTableCellRenderer();
  editor = new DefaultCellEditor(new JTextField());
  TableColumn column2 = new TableColumn(1,10,renderer, editor);
  jTable1.addColumn(column2);

  renderer = new DefaultTableCellRenderer();
  editor = new DefaultCellEditor(new JTextField());
  TableColumn column3 = new TableColumn(2,180,renderer, editor);
  jTable1.addColumn(column3);

  renderer = new DefaultTableCellRenderer();
  editor = new DefaultCellEditor(new JTextField());
  TableColumn column4 = new TableColumn(3,100,renderer, editor);
  jTable1.addColumn(column4);
  jComboBox1.addItem("");
  ResultSet r = db.query("select name from loveofgod.employee");
  while (r.next()) {
    jComboBox1.addItem(r.getString("name"));
  }

  //model.addColumn("选择") ;
  //model.addColumn("编号") ;
  //model.addColumn("日期") ;
  //model.addColumn("盘库人") ;

  //TableColumnModel colmodel = jTable1.getColumnModel();   //获取Column模式
  //colmodel.getColumn(0).setCellEditor(new DefaultCellEditor(new JCheckBox()));
  // Set column widths
  //colmodel.getColumn(0).setPreferredWidth(30);
  //colmodel.getColumn(0).setPreferredWidth(10);
  //colmodel.getColumn(1).setPreferredWidth(120);
  //colmodel.getColumn(2).setPreferredWidth(40);

  //model.getColumn(0).setPreferredWidth(40);
  //model.addColumn("相关信息") ;
  this.getContentPane().setBackground(UIManager.getColor("inactiveCaptionText"));
  this.setResizable(false); //禁止最大化

  this.getContentPane().setLayout(xYLayout1);
  this.setTitle("盘库分析");
  this.addWindowListener(new productAnalyse_this_windowAdapter(this));
  jScrollPane1.getViewport().setBackground(UIManager.getColor("inactiveCaptionText"));
  jScrollPane1.setBorder(BorderFactory.createLoweredBevelBorder());
  xYLayout1.setWidth(498);
  xYLayout1.setHeight(406);
  jTable1.setBackground(Color.white);
  jTable1.setFont(new java.awt.Font("Dialog", 0, 16));
  jTable1.setAutoscrolls(true);
  jTable1.setDebugGraphicsOptions(0);
  jTable1.setRequestFocusEnabled(true);
  jTable1.setVerifyInputWhenFocusTarget(true);
  jTable1.setShowVerticalLines(true);
  jLabel2.setFont(new java.awt.Font("Dialog", 0, 16));
  jLabel2.setBorder(titledBorder2);
  jLabel2.setText("选择技师");
  jButton1.setBackground(SystemColor.inactiveCaption);
  jButton1.setFont(new java.awt.Font("Dialog", 0, 16));
  jButton1.setBorder(BorderFactory.createLineBorder(Color.black));
  jButton1.setText("分析");
  jButton1.addActionListener(new productAnalyse_jButton1_actionAdapter(this));
  jComboBox1.setFont(new java.awt.Font("Dialog", 0, 12));
  jComboBox1.setBorder(BorderFactory.createLineBorder(Color.black));
  this.getContentPane().add(jScrollPane1, new XYConstraints(20, 56, 454, 288));
  jScrollPane1.getViewport().add(jTable1, null);
  this.getContentPane().add(jLabel1,   new XYConstraints(20, 16, 286, 26));
  this.getContentPane().add(jComboBox1,   new XYConstraints(114, 369, 117, 23));
  this.getContentPane().add(jLabel2, new XYConstraints(20, 368, 84, 24));
  this.getContentPane().add(jButton1, new XYConstraints(252, 369, 71, 23));
}

private void getResult(){
  m_data.insert();
}

public int[] getSelect(){

  return a;
}

public String getEmployee(){
  return employee;
}

void this_windowOpened(WindowEvent e) {
  getResult();
  //System.out.println("获得数据!");
}

void jButton1_actionPerformed(ActionEvent e) {
  int account=m_data.getRowCount();


  if(jComboBox1.getSelectedItem().toString().equals("")){

    for (int i = 0; i < account; i++) {
      Boolean object = (Boolean) m_data.getValueAt(i, 0);
      if ( (object.booleanValue()) == true) {
        System.out.println("已选择行:" + i);
        String num = m_data.getValueAt(i, 1).toString();
        int id=Integer.parseInt(num);
        a[j]=id;
        j++;
        System.out.println("j=" + j);
        //System.out.println("已选择物料编号:" + a[--j]);

        //rs=db.query("select * from loveofgod.materialanalyse where analyse_id='"+id+"' ");

      }
    }
    if(j==1){

        JOptionPane.showMessageDialog(null,"请选择两项!") ;
        j--;
        return;
    }
    else if(j==0){
      JOptionPane.showMessageDialog(null,"请选择两项!") ;
        //j-=2;
        return;

    }

    for(int k=0;k<a.length;k++){
      System.out.println("数组:" + a[k]);

    }
    //for(int k=0;k<a.length;k++){
      //a[k]=0;
    //}
    j=0;
    System.out.println("清零成功!");

    productAnalyseResult dlg = new productAnalyseResult(this); //当前实例
    Dimension dlgSize = dlg.getPreferredSize();
    Dimension frmSize = getSize();
    Point loc = getLocation();
    dlg.setLocation( (frmSize.width - dlgSize.width) / 2 + loc.x,
            (frmSize.height - dlgSize.height) / 2 + loc.y);
    dlg.pack();
    dlg.show();
    //this.hide();

    System.out.println("最后的j=" + j);
  }
  else{

    employee=jComboBox1.getSelectedItem().toString();

    for (int i = 0; i < account; i++) {
      Boolean object = (Boolean) m_data.getValueAt(i, 0);
      if ( (object.booleanValue()) == true) {
        System.out.println("已选择行:" + i);
        String num = m_data.getValueAt(i, 1).toString();
        int id=Integer.parseInt(num);
        a[j]=id;
        j++;
        System.out.println("j=" + j);
        //System.out.println("已选择物料编号:" + a[--j]);

        //rs=db.query("select * from loveofgod.materialanalyse where analyse_id='"+id+"' ");

      }
    }
    if(j==1){

        JOptionPane.showMessageDialog(null,"请选择两项!") ;
        j--;
        return;
    }
    else if(j==0){
      JOptionPane.showMessageDialog(null,"请选择两项!") ;
        //j-=2;
        return;

    }

    for(int k=0;k<a.length;k++){
      System.out.println("数组:" + a[k]);

    }
    //for(int k=0;k<a.length;k++){
      //a[k]=0;
    //}
    j=0;
    System.out.println("清零成功!");

    technicianAnalyseResult dlg = new technicianAnalyseResult(this); //当前实例
    Dimension dlgSize = dlg.getPreferredSize();
    Dimension frmSize = getSize();
    Point loc = getLocation();
    dlg.setLocation( (frmSize.width - dlgSize.width) / 2 + loc.x,
            (frmSize.height - dlgSize.height) / 2 + loc.y);
    dlg.pack();
    dlg.show();
    //this.hide();

    System.out.println("最后的j=" + j);

  }
  this.hide();
}

}

class productAnalyse_this_windowAdapter extends java.awt.event.WindowAdapter {
productAnalyse adaptee;

productAnalyse_this_windowAdapter(productAnalyse adaptee) {
  this.adaptee = adaptee;
}
public void windowOpened(WindowEvent e) {
  adaptee.this_windowOpened(e);
}
}

class TableData extends AbstractTableModel
{
protected Vector m_vector;
ResultSet rs;
DBManager db=new DBManager();
public TableData() {
  m_vector = new Vector();

}

public int getRowCount() {
  return m_vector==null ? 0 : m_vector.size();
}

public int getColumnCount() {
  return 0;   //为什么返回0才不出错?待解
}

public String getColumnName(int column) {
  if(column==0)
    return "选择";
  else if(column==1)
    return "编号";
  else if(column==2)
    return "日期";
  else return "盘库人";

}

public boolean isCellEditable(int nRow, int nCol) {
  if (nCol==0) {
    return true;
    }else{
    return false;
    }

}

public Object getValueAt(int nRow, int nCol) {
  Vector record=(Vector)m_vector.elementAt(nRow);
  return record.elementAt(nCol);
}

public void setValueAt(Object value, int nRow, int nCol) {
  Vector record=(Vector)m_vector.elementAt(nRow);
  record.setElementAt(value,nCol);
}

public void insert() {

  String sql;
  //查询语句
  sql="select distinct analyse_id,analyse_time,analyse_person from loveofgod.materialanalyse where material_id in (select material_id from loveofgod.material)";
//执行数据库的查询操作
  rs =db.query(sql);
  try {
    //判断返回的结果集是否为空,若不为空显示每条记录
    boolean isexist=false;
          try {
                isexist = rs.first();
                }
          catch (SQLException ex) {
          System.out.println(ex.toString());
                }
//若有数据,显示
if( isexist)
    {
    //移动游标到零的位置
    rs.beforeFirst();
    //逐条将查询结果显示在jtable中
    while(rs.next() )
    {
      System.out.println(rs.getString("analyse_id"));
      System.out.println(rs.getString("analyse_time"));
      System.out.println(rs.getString("analyse_person"));
      Vector v=new Vector();
      v.addElement(new Boolean(false));

      System.out.println("加入checkbox!");
      v.add(rs.getString("analyse_id")) ;
      v.add(rs.getString("analyse_time")) ;
      v.add(rs.getString("analyse_person")) ;

      //tempvector.add(rs.getString("remark")) ;
      m_vector.addElement(v);
    }
  }
    //若无数据,显示警告对话框
  else
  {   JOptionPane.showMessageDialog(null,"无纪录!") ;}
}
//若出现异常,弹出警告对话框
catch (SQLException ex) {
  System.out.println(ex.toString());
  JOptionPane.showMessageDialog(null,"发生错误!");
}


}

public boolean delete(int row) {
  if (row < 0 || row >= m_vector.size())
    return false;
  m_vector.remove(row);
    return true;
}
}




class CheckCellRenderer extends JCheckBox implements TableCellRenderer
{
protected static Border m_noFocusBorder;
  public CheckCellRenderer() {
      super();
      m_noFocusBorder = new EmptyBorder(1, 2, 1, 2);
      setHorizontalAlignment(JLabel.CENTER);
      setOpaque(true);
      setBorder(m_noFocusBorder);
  }
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
      if (value instanceof Boolean)
      {
        Boolean b = (Boolean) value;
        setSelected(b.booleanValue());
        //System.out.println("当前选择状态:"+b.booleanValue());
      }
      setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
      setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
      setFont(table.getFont());
      setBorder(hasFocus ? UIManager.getBorder("Table.focusCellHighlightBorder") : m_noFocusBorder);
      return this;
  }
}


class CheckBoxCellEditor extends DefaultCellEditor {
  private static JCheckBox m_checkBox = new JCheckBox();
  private int selectnum;
  public CheckBoxCellEditor() {
      super(m_checkBox);
      m_checkBox.setOpaque(false);
      m_checkBox.setHorizontalAlignment(JLabel.CENTER);
  }
  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
      if (value instanceof Boolean)
      {
        Boolean b = (Boolean) value;
        m_checkBox.setSelected(b.booleanValue());
        System.out.println("当前选择状态:"+b.booleanValue());
        System.out.println("当前行:"+row);
          //为什么false才行,待解
        if((b.booleanValue())==false){
          if(selectnum<2){
            selectnum++;
            System.out.println("已选择" + selectnum + "项!\n");
          }
          else{
            JOptionPane.showMessageDialog(null,"只能选择两项,请重新选择!");
          }
        }
        else{
          selectnum--;
          System.out.println("已选择" + selectnum + "项!\n");
        }
      }

      m_checkBox.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
      m_checkBox.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
      /**
      * Component component = getComponent(); if (component instanceof JCheckBox){ m_checkBox = (JCheckBox)component;
      *
      *
      * table.setValueAt(Boolean.valueOf(String.valueOf(m_checkBox.isSelected())),row,column); return m_checkBox; } else return component;
      */
      return m_checkBox;
  }
  public Object getCellEditorValue() {
      return new Boolean(m_checkBox.isSelected());
  }
}

class productAnalyse_jButton1_actionAdapter implements java.awt.event.ActionListener {
productAnalyse adaptee;

productAnalyse_jButton1_actionAdapter(productAnalyse adaptee) {
  this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
  adaptee.jButton1_actionPerformed(e);
}
}


热点文章
最新项目
相关文章 最新文章