如何在另一个JTable的单元格内实现JTable?如何从数据库中实现列名?

时间:2018-07-14 14:26:53

标签: java swing jtable

我对JTable不太了解,我正在尝试开发包含一个应用程序。

在应用中。我需要将JTable2放在JTable1内,jtable2也需要具有行标题,并且我想直接从数据库中实现56个以上的列标题。我正在使用AbstractTableModel 因此,我需要您的帮助,以建议我如何做。

这是我使用的代码,类似于以下代码:

package sqgemcom;

import ch.swingfx.twinkle.NotificationBuilder;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import main.java.ch.swingfx.twinkle.style.theme.DarkDefaultNotification;

public class MyModel extends AbstractTableModel{
java.sql.ResultSetMetaData   rsmd;
int colonne ;
    int ligne;
    ArrayList<Fpy> data = new ArrayList<Fpy>();
        Fpy Fpy;
        public MyModel(ResultSet rst)
        {
            try {
            rsmd=rst.getMetaData();
            colonne= rsmd.getColumnCount();
            while(rst.next()){
                Fpy= new Fpy(rst.getString(1),rst.getString(2),rst.getString(3),rst.getString(4),rst.getString(5),rst.getString(6),rst.getString(7));
            data.add(Fpy);
            ligne++;
            }
        } catch (SQLException e) {
            new NotificationBuilder().withStyle(new DarkDefaultNotification()).withTitle("Erreur")
            .withMessage("Model :impossible d'afficher la table, verifier votre connexion").withDisplayTime(3000).showNotification();
        }
        }
    @Override
    public int getRowCount() {
        return ligne;
    }

    @Override
    public int getColumnCount() {
        return colonne;
    }

    @Override
    public Object getValueAt(int lin, int col) {
       Fpy e=data.get(lin);
       String ch="";
       switch (col)
           {case 0:
            ch=(e.getId()).toString()   ;           
            break;
        case 1:
            ch=(e.getProduit()).toString();         
            break;
        case 2:
            ch=e.getOperation();            
            break;
               case 3:
        ch=(e.getQuantité_demarree()).toString()    ;               
                break;

               case 4:

            ch=(e.getQuantité_complétée()).toString();              
                    break;


               case 5:

            ch=(e.getSemaine()).toString();             
                    break;

               case 6:
            ch=(e.getFpy()).toString()  ;               
                break;  

               default:
            break;
        }
        return ch;
    }
    public String getColumnName(int l) {
        try {
            return rsmd.getColumnName(l+1);
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

}

这样的事情我希望能够在一个单元格内制作单元格,我的桌子就像一棵树:我有很多产品,每个产品都有2个代码,每个代码都有不同的单元格,我的意思是

enter image description here

1 个答案:

答案 0 :(得分:0)

  

需要行标题,并且我想直接从数据库中实现56个以上的列标题

您可以从ResultSet的元数据中获取列名:

String sql = "Select * from ???";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
Vector<Object> columnNames = new Vector<Object>(columns);

//  Get column names

for (int i = 1; i <= columns; i++)
{
    columnNames.addElement( md.getColumnName(i) );
}

DefaultTableModel model = new DefaultTableModel(columnNames, 0);

// add ResultSet row data to the model

....

JTable table = new JTable( model );