1 pièce(s) jointe(s)
un JTable avec des buttons
Bonjour .
je veux réaliser une application gestion des salles avec des emploi du temps .j'ai crée la Table 'classes' dans la base de données avec les champs : idseance, idsalle ,IdProf, idmodule, day, 8H (type boolean),10H (type boolean),14h,16H. il m'affiche ça :
Pièce jointe 174955
la Classe Fenetre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
import java.awt.BorderLayout;
import java.awt.Component;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
public class Fenetre extends JFrame {
private Statement st = null;
private ResultSet rs;
private JTable tableau;
connection con=new connection();
public Fenetre() throws SQLException{
st=con.getStatement();
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Emploi de Temps");
this.setSize(700, 500);
Object[][] data= new Object[5][4] ;
String Sql="Select * from seance";
rs=st.executeQuery(Sql);
while(rs.next()) {
switch (rs.getString("jour")){
case "lundi":
if (rs.getBoolean("8")){
data[0][0] = rs.getInt("Idmodule");
}else{data[0][0] = new JButton("Ajouter"); }
if (rs.getBoolean("10")){
data[0][1] = rs.getInt("Idmodule");
}else { data[0][1] = new JButton("Ajouter");}
if(rs.getBoolean("14")){
data[0][2] = rs.getInt("Idmodule");
}else {data[0][2] =new JButton("Ajouter"); }
if(rs.getBoolean("16")){
data[0][3] = rs.getInt("Idmodule");
}else {data[0][3] =new JButton("Ajouter") ;}
break;
case "mardi" :
if (rs.getBoolean("8")){
data[1][0] = rs.getInt("Idmodule");
}else {data[1][0] = new JButton("Ajouter");}
if(rs.getBoolean("10")){
data[1][1] = rs.getInt("Idmodule");
}else {data[1][1] = new JButton("Ajouter");}
if(rs.getBoolean("14")){
data[1][2] = rs.getInt("Idmodule");
}else {data[1][2] = new JButton("Ajouter");}
if(rs.getBoolean("16")){
data[1][3] = rs.getInt("Idmodule");
} else {data[1][3] = new JButton("Ajouter");}
}
}
String[] title = {"8h_10h","10h_12h"," 14h_16h","16h_18h"};
ZModel model = new ZModel(data, title);
this.tableau = new JTable(model);
changeSize(80, 80);
this.getContentPane().add(new JScrollPane(tableau), BorderLayout.CENTER);
this.tableau.setDefaultRenderer(JButton.class, new TableComponent());
}
////////////////////////////////////////////////////////////////////////////////////
public void changeSize(int width, int height){
//Nous créons un objet TableColumn afin de travailler sur notre colonne
TableColumn col;
for(int i = 0; i < tableau.getColumnCount(); i++){
//On récupère le modèle de la colonne
col = tableau.getColumnModel().getColumn(i);
//On lui affecte la nouvelle valeur
col.setPreferredWidth(width);
}
for(int i = 0; i < tableau.getRowCount(); i++){
//On affecte la taille de la ligne à l'indice spécifié !
tableau.setRowHeight(i, height);
}
}
//////////////////////////////////////////////////////////////
//Classe modèle personnalisée
class ZModel extends AbstractTableModel{
private Object[][] data;
private String[] title;
//Constructeur
public ZModel(Object[][] data, String[] title){
this.data = data;
this.title = title;
}
//Retourne le nombre de colonnes
public int getColumnCount() {
return this.title.length;
}
//Retourne le nombre de lignes
public int getRowCount() {
return this.data.length;
}
//Retourne la valeur à l'emplacement spécifié
public Object getValueAt(int row, int col) {
return this.data[row][col];
}
public String getColumnName(int col) {
return this.title[col];
} public Class getColumnClass(int col){
//On retourne le type de la cellule à la colonne demandée
//On se moque de la ligne puisque les types de données sont les mêmes quelle que soit la ligne
//On choisit donc la première ligne
return this.data[0][col].getClass();
}
//Retourne vrai si la cellule est éditable : celle-ci sera donc éditable
public boolean isCellEditable(int row, int col){
if(getValueAt(0, col) instanceof JButton)
return false;
return true;
}
}
} |
la classe TableComponent :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
import java.awt.Component;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
public class TableComponent extends DefaultTableCellRenderer implements TableCellRenderer{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
//Si la valeur de la cellule est un JButton, on transtype cette valeur
setText((value != null) ? value.toString() : "Ajouter");
if (value instanceof JButton)
return (JButton) value;
else
return this;
}
} |
le Problème que les Buttons sont pas active (no cliquable ) et le champs de ligne 2 1 pas de bouton .
merci ^_^ ;