java - construire - jtable windowbuilder



Pourquoi mon rendu de cellule personnalisé Java n'affiche pas la surbrillance lorsque la ligne/cellule est sélectionnée? (2)

J'ai un moteur de rendu de cellule personnalisé pour qu'une cellule fasse un retour à la ligne afin que plus de contenu puisse être lu. Voici le code:

import java.awt.Color;
import java.awt.Component;
import java.awt.Insets;

import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;

public class TextWrapCellRenderer extends JTextArea implements TableCellRenderer {
    private static final long serialVersionUID = 1L;

    public TextWrapCellRenderer() {
        setLineWrap(true);
        setWrapStyleWord(true);
        setMargin(new Insets(0, 5, 0, 5));
        setSelectionColor(Color.GREEN);
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        setText((String)value);
        setSize(table.getColumnModel().getColumn(column).getWidth(),getPreferredSize().height);
        setSelectionColor(Color.GREEN);

        return this;
    }
}

Mise à jour : Le rendu de cellule est utilisé correctement, mais lorsque l'utilisateur sélectionne une ligne dans la JTable, il affiche uniquement la surbrillance pour les cellules non personnalisées. La surbrillance s'affiche pour toutes les autres cellules de cette ligne. Cela laisse juste une cellule avec un fond blanc tandis que le reste de la rangée a le bleu (dans mon cas) comme la couleur de fond mise en évidence.


Answer #1

À l'aide de setSelectionColor (Color.GREEN); vous dites juste ce que l'utilisateur sélectionne est vert. Quel est votre problème et ce que vous attendez de votre code?


Answer #2

Je pense que vous devriez appeler l'implémentation par défaut en premier:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
    ...

L'implémentation par défaut traitera tous les arguments usuels tels que isSelected et hasFocus , définira la couleur du texte et de l'arrière-plan, activera la bordure de mise au point, etc. Ensuite, vous changerez le texte affiché, changerez la taille de cellule et return this .





tablecellrenderer