Combobox et jtable

bea4031 Messages postés 11 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005 - 10 juil. 2005 à 22:58
Guizmodams Messages postés 29 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 17 septembre 2010 - 21 juil. 2005 à 22:49
Bonjour à tous,
J'ai un souci avec un combobox et je n'arrive pas à trouver de solution alors je vous demande un peu d'aide. Je met un combobox sur une cellule d'un jtable et je veux lire la valeur sélectionnée qui permettra suivant la variable sélectionnée d'ajouter un combobox sur une autre cellule.Mon problème est que je peux lire apres avoir cliqué sur une autre cellule mais je veux lire des que j'ai choisi la valeur du combo et pas avoir besoin de recliquer ailleurs. Enfin j'espère que c clair et que quelqu'un pourra m'aider merci beaucoup!

8 réponses

Guizmodams Messages postés 29 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 17 septembre 2010
11 juil. 2005 à 01:42
C'est pas ce qu'il y a de plus clair, mais j'ai compris que tu voulais
faire un truc lorsque l'utilisateur a choisi une valeur de ton combo,
situé dans un Jtable ?


Ben il suffit d'utiliser la bonne méthode du JCombobox : getSelectedItem (ou getSelectedIndex suivant ce que tu veux récupérer)



si c'est pas ca, n'hézite pas à reformuler ta question différament...
Dohz
0
bea4031 Messages postés 11 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005
12 juil. 2005 à 08:56
Salut
En fait c'est bien ces méthodes que j'essaye d'utiliser mais ca ne marche pas du tout j'ai créé un Combobox perso avec un tablerenderer et un comboboxeditor perso mais je n'arrive pas à récupèrer de valeur meme si j'insère une fonction dans comboboxeditor avec getSelectedItem pour etre ensuite réutilisé plus facilement!
Mon problème vient aussi du fait que je ne dois pas prendre le bon évènement pour l'action, la j'essaye avec le click de la souris sur la jtable mais ca ne marche que si on clik une fois en plus en dehors du combo.
Des ce soir je mettrais mon code pour que ce soit plus clair!
Je te remercie de ton aide!
0
bea4031 Messages postés 11 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005
18 juil. 2005 à 08:48
Salut désolé pour le retard voila mon code pour le combobox se resume a cela:


public class MyComboBoxRenderer extends JComboBox implements TableCellRenderer {
public MyComboBoxRenderer(String[] items) {
super(items);
}

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
setEditable(true);
// Sélectionne la valeur
setSelectedItem(value);

return this;
}
public String getValRend(JTable table, int row, int column, boolean isSelected){
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
return getSelectedItem().toString();
}
}

public class MyComboBoxEditor extends DefaultCellEditor {

public MyComboBoxEditor(String[] items) {
//JComboBox cb=new JComboBox(items);
super(new JComboBox(items));

}

public String getVal(){
return getCellEditorValue().toString();
}
}

public class ComboPerso{
MyComboBoxRenderer comborend;
MyComboBoxEditor comboedit;
String valeur=" gf ";
int selected;
public ComboPerso(JTable table,String colname,String[] values){
DefaultTableModel model = (DefaultTableModel)table.getModel();
selected=table.getSelectedRow();
for(int i=0;i<table.getColumnCount();i++){
if(table.getColumnName(i).equals(colname)){
// Set the combobox editor on the 1st visible column
TableColumn col = table.getColumnModel().getColumn(i);
comboedit=new MyComboBoxEditor(values);
//TableColumn col = table.getColumnModel().getColumn(colonne);
col.setCellEditor(comboedit);
comborend=new MyComboBoxRenderer(values);
// If the cell should appear like a combobox in its
// non-editing state, also set the combobox renderer
col.setCellRenderer(comborend);
//valeur=combocell.getCellEditorValue().toString();
}
}
}

public MyComboBoxRenderer getComboRend(){
return comborend;
}

public String comboGetValCellAt(){
try{

valeur=comboedit.getCellEditorValue().toString();
System.out.println("Valeur combo "+valeur);

}catch(NullPointerException e){e.printStackTrace();}
return valeur;
}
}

Comme tu vois j'ai essayé plusieurs façons pour recupérer la valeur avec getValRend que j'ai créé ou getVal des choses comme ca mais je suis à cours d'idée je veux juste lire la valeur du combobox dès qu'elle est différente de chaine vide qui est la valeur de départ. Si tu peux m'aider je t'en remercie énormément!
Voila à bientot...
0
Guizmodams Messages postés 29 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 17 septembre 2010
18 juil. 2005 à 21:21
Bon, j'ai pas tout regarder attentivement, mais déja j'ai deux questions :

- dans la fct : public Component getTableCellRendererComponent(...)

tu return this, mais il contient quoi? un component? (c'est juste une
question...lol jveux dire que je suis pas agréssif!;) on sais jamais...

- la méthode getCellEditorValue().toString() : elle te permet de
récupérer quoi? sitoute fois elle te permer de récuperer qqch... parce
que le Editor m'interpelle un peu...


Sinon je regarderai ton code plus en détail un peu plus tard, si tu n'es pas trop presser...

(sinon signale me le.)

@+
Dohz
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bea4031 Messages postés 11 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005
18 juil. 2005 à 22:00
Salut,
Pour getTableCellRendererComponent(...) elle retourne bien un component et getCellEditorValue je pensais récupérer la valeur de la cellule et après je l'utilse dans ma classe ComboPerso pour pouvoir recupérer la valeur avec comboGetValCellAt() ensuite je peux faire des tests suivant la valeur du combobox pour créé si besoin d'autres combobox dans d'autres cellules. Cette classe ComboPerso est utilisée pour créer divers combo dans diverses JTable.
Disons que c assez pressé car je n'arrive pas à avancer assez vite en attendant je m'occupe de petite choses à coté.
Et je te remercie de me répondre et de ta patience car je suis pas tres à l'aise avec les Swing en java.
0
Guizmodams Messages postés 29 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 17 septembre 2010
21 juil. 2005 à 18:41
déjà, désolé pour le retard...

J'ai testé ton code et c'est pas jolie jolie... LOL je déconne.

-Déjà tu peux corriger 2 erreurs :

/////// cast le comboedit en "TableCellEditor"

col.setCellEditor((TableCellEditor) comboedit);

comborend=new MyComboBoxRenderer(values);

// If the cell should appear like a combobox in its

// non-editing state, also set the combobox renderer

/////// cast le comboedit en "TableCellEditor"

col.setCellRenderer((TableCellRenderer) comborend);



-Ensuite, vu l'étendu et le type des erreurs qu'il me renvoie, j'en
vien à me demander pourquoi tu as créé(e) 2 class (MyComboBoxEditor
& MyComboBoxRenderer).



Enfait, si ton programme le permet, j'aurai plutot créer une seule
classe (ComboPerso) dans laquelle j'aurai mis les méthodes présentes
dans tes 2 autres classes. Mais bon, c'est peu etre pas toi qui décide
de comment faire, alors...



-Sinon, je trouve ca bizard que tu appelle le constructeur superieur

(public MyComboBoxRenderer(String[] items)

{

super(items);

} )

Alors que celui ci demande plus que "items" en paramettre.



-Deplus, je crois que tu as oublié(ou alors je vois pas pourquoi ya une erreur) d'attribuer un objet aux méthodes :

setForeground(table.getForeground());

setBackground(table.getBackground());

(genre super.setBackground(table.getBackground()); ou "un_objet".setBackground(table.getBackground());)



voila, quand aux implements à inclure c'est

javax.swing.*

java.awt.*

(au moins t'es tranquille ;)



sinon je serai curieux de savoir sous quelle plate-forme tu dévellopes... (merci de répondre ...

@tres bientot.

Dohz
0
bea4031 Messages postés 11 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005
21 juil. 2005 à 20:18
Salut ,
Merci je vais regardé tout ca et je développe avec SunOne.
Merci beaucoup je suis sure que ca va bien m'aider.
A +
0
Guizmodams Messages postés 29 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 17 septembre 2010
21 juil. 2005 à 22:49
Ca marche! moi je develloppe avec Eclipse.(gavé bien!)

En tout cas j'espère que ca t'aidera.Sinon n'hézites pas!
@+
Dohz
0