在jFrame中显示来自jTable的数据

时间:2011-04-11 17:37:33

标签: java swing jtable jframe jbutton

我有jFrame2,其中包含带有4列的jTable(jTable从数据库中的表中获取包含20列的数据) 我还有jFrame1,我用它来填充数据库。 当我在jTable中选择行并单击jButton时,我想要这样做,它必须打开jframe1,显示该行的所有数据。 我会用点清楚我想要的东西

*我希望通过jbutton从jframe2打开jframe1(此任务已完成,这是代码)

      public void actionPerformed(ActionEvent e) {
       if(e.getSource()==jButton2){
       jframe2 regFace =new jframe2();
      regFace.setVisible(true);
   }}

*一旦jframe1在jframe2中由jbutton打开,它必须在其中显示jframe2中所选行的所有数据>>这一点意味着

........- sql查询一旦Jfton在jframe2中打开jfram1

就执行了

.........-显示jtextfield中的数据从数据库中获取我在上面提到的查询(此任务已完成,这是代码但尚未完成)

try {
   dbconnect = new myDbConnection();
        ResultSet resultSet =null;
        resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 FROM pledges where id='17'");

       while (resultSet.next()){
              id.setText(resultSet.getString(1));
                area.setText(resultSet.getString(2));
                location.setText(resultSet.getString(3));
                status.setText(resultSet.getString(4));
                //         i = Long.parseLong(rs1.getString(1));
            }

*简而言之,我想了解jframe1,如果您通过jframe2打开请执行查询并按该查询填充文本字段 *这是图片会更清楚 here

2 个答案:

答案 0 :(得分:3)

听起来你遇到麻烦的部分是如何将表格中的选定数据输入到jframe1的字段中。

这很大程度上取决于TableModel中使用的JTable。假设您刚刚使用DefaultTableModel,您可以获得所选的行数据:

@Override
public void actionPerformed(ActionEvent e) {
    int viewRow = myJTable.getSelectedRow();
    int modelRow = myJTable.convertRowIndexToModel(viewRow);
    DefaultTableModel model = (DefaultTableModel) myJTable.getModel();

    // You will get a compiler warning on the following line, but there's not much you can do about it beside suppress it
    Vector<Object> rowVector = (Vector<Object>) model.getDataVector().get(modelRow);

    jframe2 regFace =new jframe2();
    regFace.setSelectedRow(rowVector);
    regFace.setVisible(true);       
}

你的jframe2类中有以下方法:

public void setSelectedRow(Vector<Object> row ) {
    id.setText(row.get(0).toString());
    area.setText(row.get(1).toString());
    location.setText(row.get(2).toString());
    status.setText(row.get(3).toString());
    // continue for all columns
}

答案 1 :(得分:0)

在我回答之前我会感谢@wolfcastle这么好的人。他几乎回答了这个问题,我只是修改它以使其适应sql查询和数据库。 这是jfrme2的代码

public void actionPerformed(ActionEvent e) {
     if(e.getSource()==jButton2){
         int viewRow = jTable1.getSelectedRow();
int modelRow = jTable1.convertRowIndexToModel(viewRow);
Object oc=  jTable1.getModel().getValueAt(modelRow, 0);
String vv=oc.toString();
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
jframe1 regFace =new jframe1();
        try {
            regFace.setSelectedRow(vv);
        } catch (SQLException ex) {
            Logger.getLogger(showp1.class.getName()).log(Level.SEVERE, null, ex);
        }
regFace.setVisible(true);
   }
}

和jframe1的代码

public void setSelectedRow(String row ) throws SQLException {
dbconnect = new myDbConnection();
        ResultSet resultSet =null;
        System.out.print(row);
        resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 ,date1,insname,oname,bname,street,junction,INSPSITION,recname1 FROM pledges where id='"+row+"'");
while (resultSet.next()){
              id.setText(resultSet.getString(1));
                area.setText(resultSet.getString(2));
                location.setText(resultSet.getString(3));
                status.setText(resultSet.getString(4));
                date.setText(resultSet.getString(5));
                insname.setText(resultSet.getString(6));
                oname.setText(resultSet.getString(7));
                bname.setText(resultSet.getString(8));
                street.setText(resultSet.getString(9));
                junction.setText(resultSet.getString(10));
                insposition.setText(resultSet.getString(11));
                recname.setText(resultSet.getString(12));
            }
         }