samedi 11 décembre 2010

Attractive JTable

Dans le présent article je vais vous montrer comment créer une JTable totalement attractive (jolie).
Dans un premier temps, vous devez récrire votre DefaultTableCellRenderer qui est le responsable d'afficher les lignes de notre JTable bel et bien nous somble, d'y ajouter des bouton, des JComponents, des images ...

Alors dans un premier temps vous devez Copier/Coller le code suivant dans un fichier nommé XTableCellRenderer :



import com.jgoodies.forms.factories.Borders;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;


/**
 *
 * @author Arafat Bouchafra
 * @Date 1 sept. 2010
 * @Time 01:23:40
 */
public class XTableCellRenderer extends DefaultTableCellRenderer {


    private JLabel renderer;
    private boolean left, right;


    public XTableCellRenderer(boolean left, boolean right) {
        this.left = left;
        this.right = right;
    }
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, final int row, int column) {
        if (renderer == null) {
            renderer = new JLabel() {


                @Override
                protected void paintComponent(Graphics g) {
                    Graphics2D g2d = (Graphics2D) g.create();


                    Boolean selected = (Boolean) getClientProperty("table.selected");
                    if ((selected != null) && (selected.booleanValue())) {
                        g2d.setPaint(new LinearGradientPaint(0, 0, 0, getHeight(),
                                new float[]{0f, 0.48f, 0.481f, 1f},
                                new Color[]{new Color(135, 155, 187), new Color(35, 77, 145), new Color(6, 47, 117), new Color(31, 66, 131)}));
                    } else {
                        Integer row = (Integer) getClientProperty("table.row");
                        if (row == null) {
                            row = 0;
                        }
                        Color c = (row % 2 == 0) ? new Color(98, 100, 99) : new Color(83, 85, 84);
                        g2d.setColor(c);
                    }


                    g2d.fillRect(0, 0, getWidth(), getHeight());


                    if (left) {
                        g2d.setColor(new Color(148, 148, 146));
                        g2d.drawLine(0, 0, 0, getHeight());
                    }


                    g2d.dispose();


                    super.paintComponent(g);
                }
            };
            renderer.setFont(new Font("Arial", Font.PLAIN, 10));
            renderer.setForeground(Color.WHITE);
            renderer.setBorder(Borders.DLU4_BORDER);
            renderer.setOpaque(false);
        }
        renderer.putClientProperty("table.selected", isSelected);
        renderer.putClientProperty("table.row", row);
        if (value != null) {
            renderer.setText(value.toString());
        } else {
            renderer.setText("");
        }
        return renderer;
    }
  
}


Vous aurez impérativement besoin de télécharger le jar forms depuis ici, puis au niveau de votre table utiliser le code suivant : 

        table = new JTable(model);
        for (int i = 0; i < table.getColumnCount(); i++) {
            final boolean left = (i > 0);
            final boolean right = (i < table.getColumnCount() - 1);

            table.getColumnModel().getColumn(i).setCellRenderer(new XTableCellRenderer(left, right));
        }
        table.setShowGrid(false);
        table.setRowHeight(20);
        table.setRowMargin(0);
        table.setIntercellSpacing(new Dimension(0, 0));

        table.setGridColor(Color.BLACK);

        //tcol = table.getColumnModel().getColumn(3);
        //tcol.setCellRenderer(new MyTableCellRenderer());

        table.setBackground(Color.darkGray);
        table.setForeground(Color.white);
        table.setSelectionBackground(new Color(0x54A4DE));
        table.setSelectionForeground(Color.white);
        table.setOpaque(false);
        table.setFont(new Font("Helvana", Font.BOLD, 12));
        table.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                // TODO Auto-generated method stub
                //if(e.getClickCount() == 2)
                mouseDoubleClicked(e);
            }
        });

        scroll = new JScrollPane();
        scroll.getViewport().setOpaque(false);
        scroll.getViewport().setView(table);
        scroll.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 6, 1));
             scroll.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scroll.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scroll.setOpaque(false);
        scroll.setViewportView(table);

N'oubliez pas de me laisser vos commentaires si quelque chose ne marche pas !

Finalement je remercie ceux qui ont attendu la publication de cet article, et je leurs demandes de m'excuser ;-)

4 commentaires:

  1. N'oubliez pas de me laisser vos commentaires si quelque chose ne marche pas !

    RépondreSupprimer
  2. Merci pour ce cet article. vrm c'est très intéressent comme programme en utilisant des librairies formidables comme JGoodies.

    RépondreSupprimer
  3. merci de bien vouloir indiqué votre nom, et pays dans vos messages !

    RépondreSupprimer
  4. Je viens de l'intégrer dans mon nouvel ERP, c'est assez joli j'avoue :)
    Mehdi Dollar :) Rabat

    RépondreSupprimer