[Java] Interrupteur dans cellule de table

Interrupteur dans cellule de table [Java] - Java - Programmation

Marsh Posté le 07-03-2006 à 20:39:55    

Salut les amis !
 
J'aimerais savoir comment fait-on pour placer un interrupteur dans une cellule de JTable... Ca peut sembler bizarre, mais ceci s'avère très utile...
 
MErci à ceux qui m'aiderons ou me donnerons un bout de code !
 
A+ !

Reply

Marsh Posté le 07-03-2006 à 20:39:55   

Reply

Marsh Posté le 08-03-2006 à 01:13:39    

JTableCellRenderer


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-03-2006 à 17:41:44    

ok merci, je crois qu'il faut faire aussi un extend de JTableCellEditor pour faire en sorte que ça s'affiche et que ce soit éditable

Reply

Marsh Posté le 12-03-2006 à 23:57:50    

Bon pour tous ceux qui veulent faire un truc éditable, voici mon code, et j'ai luté pour comprendre comment ça fonctionnait
Je sais pas si c'est le meilleur code, mais je le donne quand même...
 
 

Code :
  1. import java.awt.Component;
  2. import java.awt.Insets;
  3. import java.awt.event.*;
  4. import javax.swing.JCheckBox;
  5. import javax.swing.AbstractCellEditor;
  6. import javax.swing.JOptionPane;
  7. import javax.swing.SwingConstants;
  8. import java.awt.Color;
  9. import javax.swing.JTable;
  10. import javax.swing.table.TableCellEditor;
  11. import javax.swing.table.TableCellRenderer;
  12. public class JCheckBoxCellEditorRenderer extends AbstractCellEditor implements TableCellEditor, TableCellRenderer, ItemListener  {
  13. private static final long serialVersionUID = 1L;
  14. private JCheckBox _checkBox = null;
  15. private JTable _table;
  16. private int _currentRow, _currentCol;
  17. VideoClub _videoClub;
  18. public JCheckBoxCellEditorRenderer(VideoClub vc, JTable theTable) {
  19.  _videoClub = vc;
  20.  _table = theTable;
  21. }
  22. /**  
  23.  * Permet d'obtenir un composant interrupteur éditable avec un état de départ fixé
  24.  */
  25. public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
  26.  _checkBox = new JCheckBox();
  27.  _checkBox.setHorizontalAlignment(SwingConstants.LEFT);
  28.  _checkBox.setBackground(Color.white);
  29.  _checkBox.setMargin(new Insets(0,0,0,0));
  30.  _currentRow = row;
  31.  _currentCol = column;
  32.  boolean bValue = ((Boolean) value).booleanValue();
  33.  if ( bValue == false && ((FilmsTableModel)_table.getModel()).getCptSelection() >= _videoClub.getNbFilmsLouable()) {
  34.   JOptionPane.showMessageDialog(_videoClub,"Erreur de sélection ! Impossible de choisir plus de " + _videoClub.MAX_LOCATION + " films à la fois !","Erreur", JOptionPane.ERROR_MESSAGE);
  35.   return null;
  36.  } else {
  37.   // Fixer l'état de départ
  38.   _checkBox.setSelected(bValue);
  39.   _checkBox.addItemListener(this);
  40.   return _checkBox;
  41.  }
  42. }
  43. public Object getCellEditorValue() {
  44.  return Boolean.valueOf(_checkBox.isSelected());
  45. }
  46. /**  
  47.  * Permet d'obtenir un composant interrupteur affichable avec un état de départ fixé
  48.  */
  49. public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  50.  JCheckBox cb = new JCheckBox();
  51.  cb.setSelected(((Boolean) value).booleanValue());
  52.  return cb;
  53. }
  54. public void itemStateChanged(ItemEvent e) {
  55.  if(e.getSource()instanceof JCheckBox) {
  56.   FilmsTableModel model = ((FilmsTableModel)_table.getModel());
  57.   model.setSelectionVal(Boolean.valueOf(!((Boolean)model.getValueAt(_currentRow, _currentCol)).booleanValue()), _currentRow);
  58.  }
  59. }
  60. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed