2017-08-04 4 views
0

Je suis novice à Swing. Je viens de commencer swing il y a deux semaines et je coincé à un moment donné ..Définition de la couleur sur la ligne de la JTable en utilisant JColorChooser

J'ai conçu un JTable ayant quelques lignes à cliquer (à droite), il ouvre un menu contextuel qui ont l'option « CHANGE ROW COULEUR » (JMenuItem), en cliquant sur JColorChooser s'ouvre et l'utilisateur peut choisir la couleur et la même couleur sera définie sur la ligne sélectionnée.

Est-il possible de le faire? Comment?

enter image description here

enter image description here

+3

Pour activer copier-coller, s'il vous plaît envoyer votre code sous forme de texte formaté, pas l'image. –

+0

Il existe une démo très similaire dans les tutoriels Java: http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer –

Répondre

1

Si vous voulez avoir la possibilité de colorer chaque ligne séparément, puis d'une façon est de stocker la couleur dans le cadre des données dans le TableModel. Vous devrez donc ajouter la couleur en tant que colonne dans le modèle.

Mais vous ne voulez pas afficher cette colonne dans la vue de la table afin que vous aurez besoin de le retirer de la vue:

table.removeColumn(table.getColumn(...)); 

Ensuite, vous devrez ajouter le rendu personnalisé pour la table. Une façon de faire est d'ajouter un rendu pour toute la ligne. Découvrez Table Row Rendering pour un exemple de cette approche.

Ainsi, le code de base pour le rendu serait quelque chose comme:

Color background = table.getTableModel.getValueAt(row, ???); 

if (background != null) 
    c.setBackground(background); 

Et lorsque vous affichez la couleur choisir vous devez enregistrer la couleur du TableModel:

table.getTableModel().setValueAt(color, table.getSelectedRow(), ???); 
+0

J'utilise le modèle de table par défaut et le remplissage de la table lors de l'exécution de sorte qu'il encore en coloingant la table entière il serait mieux si vous partagez du code comment ajouter de la couleur comme colom et appliquez votre concept car il donne erreur dans mon cas – anrdggle

+0

@anrdggle, 'il vaudrait mieux que vous partagiez du code' - I vous avez donné le code de travail pour commencer. Lisez le lien et téléchargez le code de démonstration. En quoi l'ajout d'une colonne avec des objets Color est-il différent de l'ajout d'une colonne avec des objets String? Si vous voulez de l'aide, postez un [mcve] qui montre ce que vous avez essayé. Je ne peux pas deviner quelle est l'erreur que vous avez, puisque je ne suis pas un lecteur d'esprit. – camickr

+0

Merci Mann il m'a fallu du temps pour comprendre ce que vous avez dit travaillait pour moi ...... Merci – anrdggle

0

Une autre façon serait de sauver la ligne & la couleur dans un map<Integer, Color>

(use table.getSelectedRow()) 

Pour capturer la couleur de la JColorChooser, utilisez: Color selectedColor = myColorChooser.getSelectionModel().getSelectedColor();

Ensuite, modifiez la valeur par défaut renderer:

table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { 
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
        boolean hasFocus, int row, int column) { 

       final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, 
         column); 

       if (listOfColor.containKey(row)) { 

        c.setBackground(listOfColor.get(row)); 

       } 

       DefaultTableCellRenderer centerRenderer = (DefaultTableCellRenderer) c; 
       centerRenderer.setHorizontalAlignment(SwingConstants.CENTER); 
       return c; 
      } 
     }); 
+0

Merci pour la réponse .... mais le problème est de savoir comment capturer la couleur de Jcolor sélecteur, puis le mettre sur la table .... Dans le lien ci-dessus aucun jcolorchooser n'est utilisé ... – anrdggle

+0

J'ai édité ma réponse pour vous donner le moyen d'obtenir la couleur du JColorChooser. –

+0

Merci Xavier .. – anrdggle