package frame;import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;public class Make extends JPanel implements ActionListener {
JLabel label1;
    JLabel label2;
    JLabel label3;
    JTextField text1;
    JTextField text2;
    JTextField text3;
    JButton button1;
    JButton button2;
    JButton button3;
    JButton button4;
    JPanel p1;
    JPanel p2;
    JPanel p3;
    JPanel p4;
    
public Make()
    {
     p1=new JPanel();
     p2=new JPanel();
     p3=new JPanel();
     p4=new JPanel();
     label1=new JLabel("姓名");
     label2=new JLabel("密码");
     label3=new JLabel("权限");
     text1=new JTextField(10);
     text2=new JTextField(10);
     text3=new  JTextField(5);
     button1=new JButton("新建");  
     button1.addActionListener(this);
     button2=new JButton("取消");
     button2.addActionListener(this);
     button3=new JButton("搜索");
        button3.addActionListener(this);
     button4=new JButton("保存");
     button4.setVisible(false);
     button4.addActionListener(this);
     this.setLayout(new GridLayout(4,3));
     p1.add(label1);
     p1.add(text1);
     p1.add(label2);
     p1.add(text2);
     p1.add(label3);
     p1.add(text3);
     p2.add(button1);
     p2.add(button2);
     p2.add(button3);
     p4.add(button4);     this.add(p1);
     this.add(p2);
     this.add(p3);
     this.add(p4);
        this.setSize(1000,600);
        this.setLocation(20,30);
this.setVisible(true);
      }
   
             
    //搜索按纽数据库连接的函数   
public String[] getData(){
     String[] a=new String[3];
         Connection con = null;
     Statement st = null;
     ResultSet rs = null;
     String url = "jdbc:sqlserver://";
     String serverName= "127.0.0.1";
     String portNumber = "1433";
     String databaseName= "CJGL";
     String userName = "dragon";
     String password = "123";
    
         
        try
        {
            //step1
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(url+serverName+":"+portNumber+";"+"DatabaseName="+databaseName,userName,password);
            st = con.createStatement();
            rs = st.executeQuery("select * from YHB where username="+"'"+text1.getText()+"'");
            while (rs.next())
            {                    
                 if(text1.getText().equals(rs.getString(1)))
                 {
                 a[0]=rs.getString(1);
                 a[1]=rs.getString(2);
                 a[2]=rs.getString(3);
                 }
                // System.out.print("<tr>:"+rs.getInt(3));
             }         } catch (ClassNotFoundException e)
           {
            e.printStackTrace();
        
            
           }catch (SQLException e)
           {
            e.printStackTrace();
           
            } finally
            {
            //step 6
            try
            {
                rs.close();
                st.close();
                con.close();
            } catch (Exception e1)
            {
            }
        }       return a;

}
 
//用户信息编辑事件触发 
public void actionPerformed(ActionEvent arg0) {
             Connection con = null;
     Statement st = null;
     ResultSet rs = null;
     String url = "jdbc:sqlserver://";
     String serverName= "127.0.0.1";
     String portNumber = "1433";
     String databaseName= "CJGL";
     String userName = "dragon";
     String password = "123";
     String[] r=new String[3];
        //搜索按钮事件触发
if(arg0.getSource()==button3)
{
text3.setEditable(false);
text2.setEditable(false);
button1.setEnabled(false);
p3.removeAll();//清空面板
Table1 t=new Table1(getData());
p3.add(t);
button4.setVisible(true);
this.updateUI();
if("".equals(text1.getText()))
         {
         JOptionPane.showMessageDialog(null, "请输入所查询的用户", "提示", JOptionPane.INFORMATION_MESSAGE);
         }
}


//触发保存相应操作
if(arg0.getSource()==button4)
{
                  这里触发事件BUTTON4
                        try
{
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
   con=DriverManager.getConnection(url+serverName+":"+portNumber+";"+"DatabaseName="+databaseName,userName,password);
   PreparedStatement stat=con.prepareStatement("这里是语句,可否把下面传过来的数组数据,一个个插入");
   stat.setString(1,);
   stat.setString(2,);
   stat.setString(3,);
   stat.executeQuery(); }
   
}catch(Exception exception)
{
  }         }


}class Table1 extends JPanel {
      /*表格列向量*/
      Vector cell ;
      Vector row;
      Vector tableHeadName;
      JTable table;
  public Table1(String[] s) {
 
  
  /*表格行向量*/
  row = new Vector();
  /*声明表格模型*/
  DefaultTableModel tableModel = new DefaultTableModel();
  /*声明表格头数组*/
  String[] tableHeads = {"姓名","密码", "权限"};
  /*将表格头转换过向量类型,以备表格模型使用*/
  tableHeadName = new Vector();
  for (int i = 0; i < tableHeads.length; i++) {
   tableHeadName.add(tableHeads[i]);
  }
  /*初始化表格数据,这些数据实例运行来源于数据库中*/
  
   //setText(String text);  
   cell = new Vector();
   cell.add(s[0]);
   cell.add(s[1]);
   cell.add(s[2]);
   row.add(cell);
  /*设置表格模型*/
  tableModel.setDataVector(row, tableHeadName);
  /*表格使用模型*/
  table = new JTable(tableModel);
  table.setRowHeight(20);   
  table.setCursor(new Cursor(12));/*new Cursor(1)设置鼠标指针样式,12为手形*/   
                  JScrollPane scrollPane = new JScrollPane(table);
  scrollPane.setCursor(new Cursor(12));
  table.setPreferredScrollableViewportSize(new Dimension(800,60)); 
  this.add(scrollPane);
  this.setSize(400, 300);
  //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setVisible(true);
 }
              public int getCol()我想用这个方法把整行数据以数组方式传到BUTTON4事件里去,再一个个修改数据库,不知道可以不
      {
   int renew;
   renew=table.getSelectedRow();//获得一行一列值 
   return renew;
      }
  
    }
 }
最近发觉弄JTABLE 参数间传递很有难度,请大侠不吝赐教!

解决方案 »

  1.   

    1、你的这个方法并不是获得一行的值啊,只是获取表格的选中行public int getCol(){ 
      int renew; 
      renew=table.getSelectedRow();//获得一行一列值 
      return renew; 
    } 2、你的Button4是保存选中的行,还是保存当前表格所有的行?最后还是不明白,有什么难度。 你在class Table1 extends JPanel 添加一个方法public DefaultTableModel getTableModel(){
      return (DefaultTableModel)table.getTableModel();
    }
    就什么都解决了,因为你删除的操作,表格中选中的行也是要删除的。如果你不想暴露TableModel的话,那就在Table1中添加相应的方法
      

  2.   

    谢谢谢谢,但是你返回了return (DefaultTableModel)table.getTableModel() 怎么实现修改JTABLE然后再修改数据库呢,语句怎么写
    我是这样想的,你看行不行,我想我先在查询出数据库的信息放到JTABLE中,然后修改后,再获得JTABLE数据,然后再把JTABLE数据修改到数据库中
      

  3.   

    看了一下,你的表格是可以直接修改的,处理应该是这样的:1、初始化时,从数据库读取数据,构造自定义数据结构,构造TableModel在JTable显示。2、对于自定义的数据结构中使用一个标志位标示该数据的状态,比如 int flag(新建、修改、删除)。3、那么在保存的时候,对TableModel中的数据进行分类处理,该调用什么SQL就调用什么SQL,而不是每一次都全部进行处理(前提你是单客户端,没有并发操作)。
      

  4.   

    按你说设置INT FLAG 似乎要修改很多哦
    您看能不能这样 我用一个方法从JTABLE中取得数据,打包成字符串数组,然后传会BUTTON4事件中,再根据传回来的数据逐一对数据库进行修改
      

  5.   

    table.getDataVector()//获取的是Table的数据,返回Vector
    其中Vector的每一位就是Table中的一行数据
      

  6.   

    错了,是tableModel.getDataVector()