javaMan Profil : Jeune recrue | salut tout le monde
j'ai un petit problème en java/swing... je voudrais insérer des bouton dans une JTable...
j'ai réussi à en mettre en faisant:
Code :
- TableColumnModel tcm = table.getColumnModel();
- TableColumn tc = tcm.getColumn(3);
- tc.setCellRenderer(new ButtonRenderer());
- tc.setCellEditor(new ButtonEditor());
|
mais tout les boutons sont pareils et tous cliquable alors que je voudrais que le bouton soit cliquable seulement selon certaine condition sur les autres cellules de la meme ligne. Le problème est que la fonction : isCellEditable est appelée avant que je puisse vérifier les champs des cellules...
je joint le code des classes ButtonEditor et ButtonRenderer
ButtonEditor :
Code :
- /*
- * Created on 1 sept. 2004
- */
- package com.citenum.listing.table;
- /**
- * @author afaillon
- */
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.EventObject;
- import javax.swing.JButton;
- import javax.swing.JTable;
- import javax.swing.event.CellEditorListener;
- import javax.swing.event.ChangeEvent;
- import javax.swing.event.EventListenerList;
- import javax.swing.table.TableCellEditor;
- import com.citenum.listing.Listing;
- import com.citenum.prosuivi.gestionPhotos.data.Photo;
- public class ButtonEditor extends JButton implements TableCellEditor {
- protected EventListenerList listenerList = new EventListenerList();
- protected ChangeEvent changeEvent = new ChangeEvent(this);
- private Photo photo;
- private int row;
- private int column;
- public ButtonEditor() {
- super();
- if(getText().equals("haute def." ))
- setText("haute def." );
- else
- setText("basse def." );
- addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- String actionCommande = e.getActionCommand();
- int row = Integer.parseInt(getName());
- if(actionCommande.equals("haute def." )){
- Listing.modele.getValueAt(row,1); //nom photo
- // TODO haute def
- }
- if(actionCommande.equals("basse def." )){
- // TODO basse def
- }
- }
- });
- }
- public void addCellEditorListener(CellEditorListener listener) {
- listenerList.add(CellEditorListener.class, listener);
- }
- public void removeCellEditorListener(CellEditorListener listener) {
- listenerList.remove(CellEditorListener.class, listener);
- }
- public void cancelCellEditing() {
- //fireEditingCanceled();
- }
- public boolean stopCellEditing() {
- //fireEditingStopped();
- return true;
- }
- public boolean isCellEditable(EventObject event) {
- return true;
- }
- public boolean shouldSelectCell(EventObject event) {
- return true;
- }
- //fonction appelée au clic
- public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
- PhotoRow photoRow = (PhotoRow) Listing.modele.getRowData(row);
- photo = photoRow.getPhotographie();
- if (photo.getFileID() == null || photo.getFileID().equals("" )){
- setBackground(new Color(192,192,192));
- setForeground(new Color(192,192,192));
- } else {
- setBackground(new Color(35,228,103));
- setForeground(Color.black);
- }
- if(column == 3){
- this.setText("haute def." );
- this.setName(String.valueOf(row));
- //this.addActionListener(actionListener);
- } else if(column == 4){
- this.setText("basse def." );
- this.setName(String.valueOf(row));
- //this.addActionListener(actionListener);
- }
- return this;
- }
- public Object getCellEditorValue() {
- return this;
- }
- }
|
ButtonRenderer :
Code :
- /*
- * Created on 1 sept. 2004
- */
- package com.citenum.listing.table;
- /**
- * @author afaillon
- */
- import java.awt.Color;
- import java.awt.Component;
- import javax.swing.JButton;
- import javax.swing.JTable;
- import javax.swing.table.TableCellRenderer;
- import com.citenum.listing.Listing;
- import com.citenum.prosuivi.gestionPhotos.data.Photo;
- public class ButtonRenderer extends JButton implements TableCellRenderer {
- public ButtonRenderer() {
- super();
- if(getText().equals("haute def." ))
- setText("haute def." );
- else
- setText("basse def." );
- }
- //fonction appelée à l'affichage
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
- PhotoRow photoRow = (PhotoRow) Listing.modele.getRowData(row);
- Photo photo = photoRow.getPhotographie();
- if (photo.getFileID() == null || photo.getFileID().equals("" )){
- setEnabled(false);
- setBackground(new Color(192,192,192));
- setForeground(new Color(192,192,192/*236,38,28*/));
- } else {
- setBackground(new Color(35,228,103));
- setForeground(Color.black);
- setEnabled(true);
- }
- if(column == 3){
- setText("haute def." );
- setName(String.valueOf(row));
- addActionListener(actionListener);
- }
- if(column == 4){
- setText("basse def." );
- setName(String.valueOf(row));
- addActionListener(actionListener);
- }
- return this;
- }
- }
|
j'espère que quelqu'un saura me répondre...
merci Message édité par javaMan le 03-09-2004 à 10:23:31
|