我在JTable1中查询数据库得到数据后,如何双击鼠标选择一行将此行写入到另一个JTable2中?我想通过将此行先写到数据库的一个临时表中,然后在JTable2查询这个临时表得到数据,我决的会有更好的方法直接在页面传值,请高手指教。

解决方案 »

  1.   

    很简单啊,处理双击事件,先取得那条记录,再加到第二个table中去~~
    我是不是没有理解LZ的意图啊,呵呵
      

  2.   

    没必要劳动数据库老大,给jtable1添加监听器,得到第几行,取jtable1的talbemodel的相应数据,放在jtable2的tablemodel2里,然后tablemodel2.fireTableDataChanged()
      

  3.   

    抱歉,我没有说明白,我想问的是:在页面上我写好了一个JTable1,双击YpmxTable得到一行,在JTable1中要得到YpmxTable 中的数据,每双击一次如何使JTable1增加一行。public class JTable1 extends JPanel{
      private static JTable1 table1 = null;
      //声明表格
      JTable table = new JTable();
      //声明表格的数据类
      DefaultTableModel model;
      //表格的数据
      String columnOne = null;
      String columnTwo = new String();
      String columnThree = new String();
      String columnFour = new String();
      String columnFive = new String();
      String columnSix = new String();
      String columnSeven = new String();
      //表格的标题
      String[] columnNames = {
         "药名","规格","单位","数量","单价","小计"
      };
      JScrollPane jScrollPane1 = new JScrollPane();
      BorderLayout borderLayout1 = new BorderLayout();
      public JTable1() {
        try {
          table1=this;
          jbInit();
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }  void jbInit() throws Exception {
        Dimension s = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        this.setBackground(SystemColor.controlHighlight);
        this.setFont(new java.awt.Font("Dialog", 0, 11));
        this.setDebugGraphicsOptions(0);
        this.setPreferredSize(new Dimension(480, 128));
        this.setToolTipText("");
        Object[][] data={
            {columnOne,columnTwo,columnThree,columnFour,columnFive,columnSix,columnSeven},
            {"","","","","",""},
            {"","","","","",""},
            {"","","","","",""},
            {"","","","","",""}
      };
      model =new DefaultTableModel(data, columnNames) {
        public boolean isCellEditable(int row, int column) {
          return false;
        } //指让单元不可编辑
      };
      table.setModel(model);
      //指定标题的重新排序不被允许
      table.getTableHeader().setReorderingAllowed(false);
      //不会因为在列标题之间拖动而改变大小
    //    table.getTableHeader().setResizingAllowed(false);
      this.setLayout(borderLayout1);
        //使选择框成为一个单元格
        table.getTableHeader().setFont(new java.awt.Font("Dialog", 0, 12));
        table.getColumnModel().getColumn(0).setPreferredWidth( 225 );
        table.getColumnModel().getColumn(1).setPreferredWidth( 80 );
        table.getColumnModel().getColumn(2).setPreferredWidth( 40 );
        table.getColumnModel().getColumn(3).setPreferredWidth( 50 );
        table.getColumnModel().getColumn(4).setPreferredWidth( 60 );
        table.setFont(new java.awt.Font("Dialog", 0, 12));
        table.setDebugGraphicsOptions(0);
        table.setMaximumSize(new Dimension(2147483647, 100));
        table.setColumnSelectionAllowed(false);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setRowHeight(20);
        //取得表格的行方法
        jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        jScrollPane1.getViewport().setBackground(Color.white);
        jScrollPane1.setFont(new java.awt.Font("Dialog", 0, 9));
        jScrollPane1.setDebugGraphicsOptions(0);
        jScrollPane1.setSize(s);
        this.add(jScrollPane1, BorderLayout.CENTER);
        jScrollPane1.getViewport().add(table);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      }
      public static JTable1 createInstance(){
        return table1;
      }
    }public class YpmxTable extends JPanel{
      private static YpmxTable ypmxTable = null;
      //声明表格
      JTable table = new JTable();
      //声明表格的数据类
      DefaultTableModel model;
      //表格的数据
      Object[][] data={
          {
              "", "", "", "", "", ""
          }
      };
      //表格的标题
      String[] columnNames = {
         "代    码", "拼 音 码", "品    名", "规    格", "单    位", "单    价"
      };
      JScrollPane jScrollPane1 = new JScrollPane();
      BorderLayout borderLayout1 = new BorderLayout();
      public YpmxTable() {
        try {
          ypmxTable = this;
          jbInit();
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }  void jbInit() throws Exception {
        Dimension s = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        this.setBackground(SystemColor.controlHighlight);
        this.setFont(new java.awt.Font("Dialog", 0, 12));
        this.setDebugGraphicsOptions(0);
        this.setPreferredSize(new Dimension(680, 400));
        this.setToolTipText("");
        //从数据库查询得到的数据
        RunClass runClass = new RunClass();
        List list = (List) runClass.getLeechdomList();
        if (list == null || list.size() < 1) {
          JLabel label = new JLabel("表中无数据,请到系统管理添加据!",SwingConstants.CENTER);
          label.setFont(new Font("Dialog", 0, 12));
          JOptionPane.showMessageDialog(null, label);
        }
        else {
          int trow=list.size();
          int tcol=columnNames.length;
          data = new Object[trow][tcol];
          int tmp=0;
          for (int i = 0; i < list.size(); i++) {
            for (int row = 0; row < trow; row++) {
              YaoPinMingXiDo yaoPinMingXiDo = new YaoPinMingXiDo();
              yaoPinMingXiDo = (YaoPinMingXiDo) list.get(i);
              String[] values = {
                  yaoPinMingXiDo.getDM(),
                  yaoPinMingXiDo.getPYM(),
                  yaoPinMingXiDo.getYM(),
                  yaoPinMingXiDo.getGG(),
                  yaoPinMingXiDo.getDW(),
                  String.valueOf(yaoPinMingXiDo.getLSJG())
              };
              for (int j = 0; j < values.length; j++) {
                data[tmp][j] = values[j];
              }
            }
            tmp++;
          }
        }
        model =new DefaultTableModel(data, columnNames) {
          public boolean isCellEditable(int row, int column) {
            return false;
          } //指让单元不可编辑
        };
        table.setModel(model);
        //指定标题的重新排序不被允许
        table.getTableHeader().setReorderingAllowed(false);
        //不会因为在列标题之间拖动而改变大小
    //    table.getTableHeader().setResizingAllowed(false);
        this.setLayout(borderLayout1);
        //使选择框成为一个单元格
        table.getTableHeader().setFont(new java.awt.Font("Dialog", 0, 14));
        table.getColumnModel().getColumn(2).setPreferredWidth( 300 );
        table.getColumnModel().getColumn(4).setPreferredWidth( 60 );
        table.setFont(new java.awt.Font("Dialog", 0, 12));
        table.setDebugGraphicsOptions(0);
        table.setMaximumSize(new Dimension(2147483647, 100));
        table.setColumnSelectionAllowed(false);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setRowHeight(20);
        //JTable中怎样获取鼠标所在位置的行数
        table.addMouseListener(new MouseAdapter() {
          public void mouseClicked(MouseEvent e) {
            //双击了鼠标显示详细信息
            if (e.getClickCount() == 2) {
              YpShuLingDialog.tableEdit.showYpShuLiangDialog();
              //获取鼠标点击的行的位置(及行数)
              Point mousepoint;
              mousepoint = e.getPoint();
              //取得行的第一列数据
              List v_list = (List)new RunClass().getLeechdomInfo();
              Object data = model.getValueAt(table.rowAtPoint(mousepoint), 2);
              String value0 = data.toString();
              JTable1.createInstance().columnOne = value0;
              try {
                JTable1.createInstance().jbInit();
              }
              catch (Exception ex) {
              }
              YpmxDialog.closeMyDialog();
            }
          }
        });
        table.addKeyListener(new KeyAdapter() {
          public void keyPressed(KeyEvent evt) {
            if (evt.getKeyCode() == 10) {
              YpShuLingDialog.tableEdit.showYpShuLiangDialog();
            }
          }
        });    jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        jScrollPane1.getViewport().setBackground(Color.white);
        jScrollPane1.setFont(new java.awt.Font("Dialog", 0, 12));
        jScrollPane1.setDebugGraphicsOptions(0);
        jScrollPane1.setSize(s);
        this.add(jScrollPane1, BorderLayout.CENTER);
        jScrollPane1.getViewport().add(table);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      }
      public static  YpmxTable creatInstance(){
        return ypmxTable;
      }
    }
      

  4.   

    我现在已经实现了将表JTable1一行一行的显示出来,但是当数组初始化的时候为空,当显示的时候是从第二行显示出来的,请问高手如何解决?
    public class JTable1 extends JPanel{
      private static JTable1 table1 = null;
      //声明表格
      JTable table = new JTable();
      //声明表格的数据类
      DefaultTableModel model;
      //表格的数据
      String columnOne = null;
      String columnTwo = new String();
      String columnThree = new String();
      String columnFour = new String();
      String columnFive = new String();
      String columnSix = new String();
      String columnSeven = new String();
      //表格的标题
      String[] columnNames = {
         "药名","规格","单位","数量","单价","小计"
      };
      int i=0 ;
      Object[][] data = new Object[][] {
       new Object[] {"","","","","",""},
       new Object[] {"","","","","",""},
       new Object[] {"","","","","",""},
       new Object[] {"","","","","",""},
       new Object[] {"","","","","",""},
    };  JScrollPane jScrollPane1 = new JScrollPane();
      BorderLayout borderLayout1 = new BorderLayout();
      public JTable1() {
        try {
          table1=this;
          jbInit();
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }  void jbInit() throws Exception {
        Dimension s = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        this.setBackground(SystemColor.controlHighlight);
        this.setFont(new java.awt.Font("Dialog", 0, 11));
        this.setDebugGraphicsOptions(0);
        this.setPreferredSize(new Dimension(480, 128));
        this.setToolTipText("");
         //这里i=1,从第二行开始写入数据
          data[i][0] = columnOne;
          data[i][1] = columnTwo;
          data[i][2] = columnThree;
          data[i][3] = columnFour;
          data[i][4] = columnFive;
          data[i][5] = columnSix;
          System.out.println("data[i][0]===="+i+data[i][0]);
          i++;  model =new DefaultTableModel(data, columnNames) {
        public boolean isCellEditable(int row, int column) {
          return false;
        } //指让单元不可编辑
      };
      table.setModel(model);
      //指定标题的重新排序不被允许
      table.getTableHeader().setReorderingAllowed(false);
      //不会因为在列标题之间拖动而改变大小
    //    table.getTableHeader().setResizingAllowed(false);
      this.setLayout(borderLayout1);
        //使选择框成为一个单元格
        table.getTableHeader().setFont(new java.awt.Font("Dialog", 0, 12));
        table.getColumnModel().getColumn(0).setPreferredWidth( 225 );
        table.getColumnModel().getColumn(1).setPreferredWidth( 80 );
        table.getColumnModel().getColumn(2).setPreferredWidth( 40 );
        table.getColumnModel().getColumn(3).setPreferredWidth( 50 );
        table.getColumnModel().getColumn(4).setPreferredWidth( 60 );
        table.setFont(new java.awt.Font("Dialog", 0, 12));
        table.setDebugGraphicsOptions(0);
        table.setMaximumSize(new Dimension(2147483647, 100));
        table.setColumnSelectionAllowed(false);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setRowHeight(20);
        //取得表格的行方法
        jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        jScrollPane1.getViewport().setBackground(Color.white);
        jScrollPane1.setFont(new java.awt.Font("Dialog", 0, 9));
        jScrollPane1.setDebugGraphicsOptions(0);
        jScrollPane1.setSize(s);
        this.add(jScrollPane1, BorderLayout.CENTER);
        jScrollPane1.getViewport().add(table);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      }
      public static JTable1 createInstance(){
        return table1;
      }
    }
      

  5.   

    获取鼠标事件mouseClicked即可;
    通过MouseEvent event中可以得到,鼠标点击的单元格行,列table.getSelectedColumn()table.getSelectedRow(),只要知道行数,通过table.getValueAt(列,行)不就是可以得到被选中的一行数据,然后添加到另外一个TABLE即可(您的程序太长了,受不了),不知道是否对你有帮助?
      

  6.   

    我想应该这样做在JTable1中改一下
    if(i>0){
          data[i][0] = columnOne;
          data[i][1] = columnTwo;
          data[i][2] = columnThree;
          data[i][3] = columnFour;
          data[i][4] = columnFive;
          data[i][5] = columnSix;
          System.out.println("data[i][0]===="+i+data[i][0]);
          i++;}
    这就可以了,当i>0时就向下写一行