Centrer reponse SQL jTable [Résolu]

Signaler
Messages postés
31
Date d'inscription
jeudi 22 juillet 2010
Statut
Membre
Dernière intervention
14 février 2017
-
Messages postés
7
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
21 juin 2011
-
Bonjour à tous,

j'ai un problème et je ne sais le résoudre.

J'ai deux méthodes qui me permettent de centrer les données d'une cellule d'une jTable et une seconde qui permet d'adapter la taille de la cellule suivant son contenu.
Ses deux méthodes fonctionnent correctement.
Ci-dessous leur code:

public static JTable CenterMyTable(JTable table) {
DefaultTableCellRenderer center = new DefaultTableCellRenderer();
center.setHorizontalAlignment(JLabel.CENTER);
for (int i=0 ; i<table.getColumnCount() ; i++)
table.getColumnModel().getColumn(i).setCellRenderer(center);
return table;
}


public static JTable AdaptMyTable(JTable table) {
FontMetrics fm = table.getFontMetrics(table.getFont());
for (int i = 0 ; i < table.getColumnCount() ; i++) {
int max = 0;
for (int j = 0 ; j < table.getRowCount() ; j++) {
int taille = fm.stringWidth((String)table.getValueAt(j,i));
if (taille > max) max = taille;
}
String nom = (String)table.getColumnModel().getColumn(i).getIdentifier();
int taille = fm.stringWidth(nom);
if (taille > max) max = taille;
table.getColumnModel().getColumn(i).setPreferredWidth(max+10);
}
return table;
}


Ensuite, dans mon code principal, j'effectue une requete SQL sur ma base de données et récupère son résultat. Je désire que son résultat soit envoyer dans une jTable de type DefaultTableModel. Voici-son code:

String[] MyTableColumnsName = {"Modelo", "Nombre", "IP", "Procesador",
"Velocidad", "Memoria", "HDD TOTAL",
"HDD LIBRE"};
DefaultTableModel MyTable = new DefaultTableModel();
MyTable.setColumnIdentifiers(MyTableColumnsName);

try {
java.sql.ResultSetMetaData recordBDCAST = recordBD.getMetaData();
int colNo = recordBDCAST.getColumnCount();

while (recordBD.next()) {
Object[] objects = new Object[colNo];
for (int i = 0; i < colNo; i++) {
objects[i] = recordBD.getObject(i + 1).toString();
}
MyTable.addRow(objects);
}
}
catch (SQLException ex) {
Logger.getLogger(Search.class.getName()).log(Level.SEVERE, null, ex);
}

Results results;
results = new Results(this,true);
Results.jTable1.setModel(MyTable);
results.setVisible(true);


Malheureusement, avec ce code principal, je ne peux me servir de mes deux méthodes (CenterMyTable et AdaptMyTable) car elles prennent en paramètre une JTable et non une DefaultTableModel. Le problème est que si je change les paramètres d'entrée de ses deux méthodes, le "getColumnModel()" n'est plus reconnu... et j'en ai bien évidemment besoin...


J'ai essayé de résoudre ce problème mais en vain.
Si vous avez une idée... grand grand merci :)

4 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
103
Salut,

Le DefaultTableModel n'est que le model du JTable, tu peux y accèder par le getter getModel à partir d'un JTable.

Results results;
results = new Results(this,true);
Results.jTable1.setModel(MyTable);
AdaptMyTable(MyTable);
results.setVisible(true);
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
31
Date d'inscription
jeudi 22 juillet 2010
Statut
Membre
Dernière intervention
14 février 2017
1
Merci beaucoup, mes deux méthodes fonctionnent maintenant!!!

Bonne continuation
Messages postés
7
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
21 juin 2011

Le bidoulleur le moin gradé du cameroun
Messages postés
7
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
21 juin 2011

ublic class VueXLS {
public static void main(String args[]) throws FileNotFoundException, IOException, InterruptedException {
File cible = new File("a.xls");
JTable tableur = VueXLS.CreerJTableAvecExcel(cible);
tableur.setRowSelectionAllowed(false);
tableur.setShowGrid(false);
tableur.setTableHeader(null);
TableColumn col = tableur.getColumnModel().getColumn(2);
col.setPreferredWidth(150);
tableur.setFont(new Font(Font.SANS_SERIF,Font.PLAIN,14));
VueXLS.Tableur=tableur;
JFrame cadre = new JFrame("vue de monfichier excel");
cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cadre.setSize(800, 500);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
cadre.setLocation((d.width - cadre.getSize().width) / 2, (d.height - cadre.getSize().height) / 2);
JScrollPane panel = new JScrollPane();
panel.setViewportView(tableur);
panel.getViewport().getView().setBackground(null);
cadre.add(panel,BorderLayout.CENTER);
cadre.setVisible(true);
cadre=null;
panel=null;
wb=null;
sheet=null;
int t=0;

while(true) {
Thread.sleep(1000);
long armand=System.currentTimeMillis();
SetData("Mise à jour "+t+++" fois",3,2);
SetData("Fotso",0,6);
Long armand2 =System.currentTimeMillis();
Long temps=armand2-armand;
SetData("mise à jour en "+temps+" ms",0,5);
}
}
public VueXLS(){

}
static JTable Tableur;
static HSSFWorkbook wb;
static HSSFSheet sheet;
public static JTable CreerJTableAvecExcel(File file) throws FileNotFoundException, IOException{
//Creer nouvelle table
JTable table = new JTable();

//Lecture du fichier excel
InputStream inp = new FileInputStream(file);
HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));
VueXLS.wb=wb;
//Recupére page 1 du fichier xls
HSSFSheet sheet = wb.getSheetAt(0);
VueXLS.sheet=sheet;
//compte nombre de lignes
int Nbreligne = 1+sheet.getLastRowNum();
System.out.println("Nombre de ligne "+Nbreligne);


//compte nombre de colonnes
int Nbrecollone = NombreMaxColonne(sheet);
System.out.println("Nmbre de collne" +Nbrecollone);

//créer nouveau tableau d'objet
Object[][] o = new Object[Nbreligne][Nbrecollone];

//en tete du tableau
// Object[] titre = new Object[Nbrecollone];
JTable[] titre =new JTable[Nbrecollone];


//parcours la feuille et on recup les lignes une par une
for(int i = 0; i<Nbreligne;i++){
HSSFRow row = sheet.getRow(i);

//parcours la ligne pour récupérer les colonnes
if(row!=null){
for(int j = 0;j<Nbrecollone;j++){
//Récupère la cellule puis sa valeur
HSSFCell cell = row.getCell(j);
Object value = ContenuCellule(cell);
//System.out.println(value.toString());
o[i][j] = value;
}
}
}

inp.close();
table.setModel(new DefaultTableModel(o,titre));

return table;
}

private static Object ContenuCellule(HSSFCell cell){
Object value = null ;

if(cell == null){
value = "";
}

else if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){
value = cell.getBooleanCellValue();
}
else if(cell.getCellType() == HSSFCell.CELL_TYPE_ERROR){
value = cell.getErrorCellValue();
}

else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
value = cell.getNumericCellValue();
}
else if(cell.getCellType() == HSSFCell.CELL_TYPE_STRING){
value = cell.getStringCellValue();
}
else if(cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
evaluator.evaluate(cell);
value= cell.getNumericCellValue();

}
return value;

}

/**
* Permet de récupérer le nombre maximun de colonne .
* Si une ligne comporte 2 cases vides à la fin , celles ci ne sont pas prises en compte.
* Donc pour pouvoir récupérer le nombre de colonne pour initialiser notre tableau on doit parcourir toutes les lignes
*
*/
private static int NombreMaxColonne(HSSFSheet sheet){

int r = sheet.getLastRowNum();
int max = 0;
int s = 0;
while(s<r){
if(sheet.getRow(s) != null){
int c = sheet.getRow(s).getLastCellNum();
if(c>max){
max = c;
}
}
s++;

}
return max;
}

// methode pour reècrire dans la cellule de ma fenetre

public static void SetData(Object obj, int lig_index, int col_index){
Tableur.getModel().setValueAt(obj,lig_index,col_index);
// System.out.println(obj+" bien ajouté dans la cellule "+"("+lig_index+","+col_index+")");
}

}