IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

JTable griser colonne


Sujet :

Composants Java

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut JTable griser colonne
    Bonjour,

    J'ai une interface graphique avec un JTable et des checkbox, je souhaiterais griser des colonnes lorsque des checkbox sont cochées.
    Si samedi est coché, on grise tout les samedis
    Si dimanche est coché, on grise tout les dimanches

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    public class CalendarWeekViewer extends JPanel implements ActionListener, ItemListener {
     
        Calendar calendar;
        DateFormat dateFormatter;
     
        CalendarWeekTableModel tableModel;
     
        JLabel monthLabel, yearLabel;
        JTable table;
        int anneeChoisit;
        private WeekPanel weekPanel;
     
    	public CalendarWeekViewer(String uneAnnee) {
    		Annee annee = new Annee();
    		anneeChoisit = annee.anneeChoisit(uneAnnee);
    		int anneeDefinitif = 0;
            calendar = Calendar.getInstance();
    		int anneeActuelle;
    		anneeActuelle = calendar.get(Calendar.YEAR);
    		if(anneeActuelle < anneeChoisit){
    			anneeDefinitif = anneeChoisit - anneeActuelle; 
    			calendar.add(Calendar.YEAR, +anneeDefinitif);
    		}else if(anneeActuelle > anneeChoisit){
    			anneeDefinitif = anneeActuelle - anneeChoisit;
    			calendar.add(Calendar.YEAR, -anneeDefinitif);
    		}else{
    			calendar.add(Calendar.YEAR, 0);
    		}
     
            calendar.set(Calendar.MONTH,Calendar.SEPTEMBER); // on se positionne sur le mois de septembre (le début de notre liste de semaines)    	   
            calendar.set(Calendar.WEEK_OF_MONTH, 1); // on se positionne sur la première semaine du mois
            calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()); // on se positionne sur le premier jour officiel
     
            dateFormatter = new SimpleDateFormat("MMMM yyyy");
            createComponents();
        }
     
        private void createComponents() {
        	JCheckBox saturdayCheck = new JCheckBox("Samedi");
        	JCheckBox sundayCheck = new JCheckBox("Dimanche");
        	JLabel holidays = new JLabel("Jours Non-ouvrés");
        	JPanel checkBox = new JPanel();
        	checkBox.add(saturdayCheck);
        	checkBox.add(sundayCheck);
     
        	saturdayCheck.addItemListener(this);
        	sundayCheck.addItemListener(this);
            yearLabel = new JLabel("Année : "+anneeChoisit+ "-"+(anneeChoisit+1));
            yearLabel.setFont(new Font(null, Font.BOLD, 20));
     
            monthLabel = new JLabel(getWeekLabel());
            monthLabel.setFont(new Font(null, Font.PLAIN, 18));
            monthLabel.setVerticalAlignment(JLabel.CENTER);
            monthLabel.setHorizontalAlignment(JLabel.CENTER);
     
            tableModel = new CalendarWeekTableModel(calendar);
            table = new JTable((TableModel)tableModel);
            table.setPreferredScrollableViewportSize(new Dimension(1400, 600));
            table.setDefaultRenderer(String.class, new CalendarWeekRenderer());
            table.setRowHeight(200);
            TableColumnModel tableColumnModel = table.getColumnModel();
            for (int i=0; i < tableColumnModel.getColumnCount(); ++i) {
                TableColumn tableColumn = tableColumnModel.getColumn(i);
                tableColumn.setPreferredWidth(200);
            }
     
            JScrollPane tableScrollPane = new JScrollPane(table);
     
            JPanel southPanel = new JPanel(new BorderLayout()); // le panel intermédiaire
     
            // on créé le weekPanel	
            weekPanel = new WeekPanel(this, calendar);
            // on met le weekPanel dans le panel intermédiaire
            southPanel.add(weekPanel, BorderLayout.SOUTH);
            JPanel panneau1 = new JPanel(new BorderLayout());
            panneau1.setPreferredSize(new Dimension(1400, 600));
            panneau1.add(monthLabel, BorderLayout.NORTH);
            panneau1.add(tableScrollPane, BorderLayout.CENTER);
            panneau1.add(southPanel, BorderLayout.SOUTH);
            JPanel panneau3 = new JPanel(new BorderLayout());
            JPanel panneau2 = new JPanel(new BorderLayout());
            panneau2.add(yearLabel, BorderLayout.WEST);
            panneau2.add(checkBox, BorderLayout.EAST);
            panneau3.add(panneau2, BorderLayout.NORTH);
            panneau3.add(panneau1);
            this.add(panneau3);
        }
     
        public void setWeek(Calendar selection) {
        	calendar.setTime( selection.getTime());
                monthLabel.setText(getWeekLabel());
            	tableModel.fireTableStructureChanged(); 
            	weekPanel.updateSelection();
        }
     
        private String getWeekLabel() {
     
        	Calendar calendar = Calendar.getInstance(); // on créé un nouveau calendar pour pas modifier le calendar qui nous sert pour savoir quelle semaine on affiche
        	calendar.setTime(this.calendar.getTime()); // on recopie dedans la date actuellement mise dans le calendar qui ser pour savoir quelle semaine on affiche
     
        	int week = calendar.get(Calendar.WEEK_OF_YEAR); // on récupère le numéro de la semaine
     
            // le premier jour de cette semaine
        	Date premierJour = calendar.getTime();
        	int monthPremierJour = calendar.get(Calendar.MONTH); // bug ici (il y avait int monthPremierJour = calendar.get(Calendar.MONDAY); donc n'importe quoi)!!!
     
            // le dernier jour de cette semaine
        	calendar.add(Calendar.WEEK_OF_YEAR, 1);
        	calendar.add(Calendar.DAY_OF_WEEK, -1);
        	Date dernierJour = calendar.getTime();
     
        	int monthDernierJour = calendar.get(Calendar.MONTH);
     
        	return WeekPanel.getWeekLabel(week, premierJour, dernierJour, monthPremierJour, monthDernierJour); 
        }
     
    	public void actionPerformed(ActionEvent arg0) {
     
    	}
     
    	@Override
    	public void itemStateChanged(ItemEvent arg0) {
     
     
    	}
    }

  2. #2
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai essayer ceci mais cela ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public void itemStateChanged(ItemEvent event) {
    		Object source = event.getSource();
    		if (source.equals(saturdayCheck)) {
    			tableModel.getColumnName(6);
    			tableModel.isCellEditable(1, 5);
    			setBackground(COLOR_SELECTION);
    		}
    	}
    Je veux rendre la colonne non éditable et la griser

    Classe CalendarWeekTableModel si cela peut aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    public class CalendarWeekTableModel extends AbstractTableModel {
     
        /**
             * serialVersionUID
             */
    	private static final long serialVersionUID = 1L;
     
    	private Calendar calendar;
     
        private List<Journee> modeleJournee = new ArrayList<Journee>(); 
     
        public CalendarWeekTableModel(Calendar calendar) {
        	this.calendar = calendar;
        }
     
        public int getColumnCount() {
        	// ramene les 7 jours de la semaine
            return 7;
        }
     
        public int getRowCount() {
        	// ramene le nombre de ligne
        	// nombre de demi journée 
        	return 2;
        }
     
        public String getColumnName(int col) {
            return getDayName(col);
        }
     
        public Object getValueAt(int row, int col) {
        	return "";
        }
     
        public boolean isCellEditable(int row, int col) {
        	return true;
        }
     
        public void setValueAt(Object value, int row, int col) {
        	 Journee journee = modeleJournee.get(col);
        	 if(col ==0) {
        		 journee.getMatin().setLibelle(value.toString());    		 
        	 }
        	 if(col ==1) {
        		 journee.getApresmidi().setLibelle(value.toString());    		 
        	 } 
        }
     
        	  private String getDayName(int day) {
        	    	Calendar calendarDay = Calendar.getInstance();
        	    	calendarDay.setTime(calendar.getTime());
        			calendarDay.add(Calendar.DATE, day);
        			return calendarDay.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault())+" "+calendarDay.get(Calendar.DATE); // bug sur cette ligne calendar au lieu de calendarDay
        		}
     
     
        protected void intialiserJournee() {
        	// initalisation de la journée 
        	for(int i =0; i<7; i++)
        	{
        		modeleJournee.add(new Journee());	
        	}
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JTable] RowSet, Colonnes, Binding
    Par Ezor dans le forum Composants
    Réponses: 0
    Dernier message: 26/03/2009, 10h07
  2. [JTable] nom colonne
    Par jfrag dans le forum Composants
    Réponses: 6
    Dernier message: 08/01/2008, 12h13
  3. Icon pour pour JButton dans une Jtable + pb colonnes
    Par dim_italia dans le forum Composants
    Réponses: 3
    Dernier message: 22/02/2006, 18h05
  4. [Peu important]JTable effacer colonne
    Par leminipouce dans le forum Composants
    Réponses: 6
    Dernier message: 07/12/2005, 17h30
  5. [SWING][JTable] Taille colonnes
    Par Antunes dans le forum Composants
    Réponses: 4
    Dernier message: 28/06/2004, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo