JTable!

Résolu
cs_crashed Messages postés 8 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 18 janvier 2011 - 26 déc. 2008 à 16:23
cs_crashed Messages postés 8 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 18 janvier 2011 - 27 déc. 2008 à 20:16
bonsoir,

je travaille avec jbuilder version 9 et j'ai une jTable mais le
problème est que j'aimerai qu'une ou bien plusieurs cellules (celles
que je choisirai après) de la jtable soient divisés en 1 ou plusieurs
lignes.exemple:

si je fais rentrer le chiffre 3 par exemple dans une cellule alors la cellule qui se trouve a coté se divisera en 4 lignes.

j'espère que vous pourrez m'aider

Merci!

4 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
27 déc. 2008 à 02:58
Voila:

/*
 * MultilineCellsDemo.java
 *
 */

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class MultilineCellsDemo extends JFrame {

    private JScrollPane jScrollPane1;
    private JTable jTable1;
    private int rowHeight = 44;
    private DefaultTableModel model;

    public MultilineCellsDemo() {
        super("MultilineCellsDemo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(650, 350);
        setLocationRelativeTo(null);
        jScrollPane1 = new JScrollPane();
        jTable1 = new JTable();
        jTable1.setModel(new DefaultTableModel(
                new Object[][]{
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null},
                    {null, null, null, null}
                },
                new String[]{
                    "Title 1", "Title 2", "Title 3", "Title 4"
                }));
        jScrollPane1.setViewportView(jTable1);
        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
        jTable1.setDefaultRenderer(Object.class, new MyRenderer());
        jTable1.setRowHeight(rowHeight);
        model = (DefaultTableModel) jTable1.getModel();
        model.setValueAt("3", 0, 0);
        model.setValueAt("Ceci est un exemple", 0, 1);
        model.setValueAt("2", 1, 1);
        model.setValueAt("Ceci est un exemple", 1, 2);
        model.setValueAt("1", 2, 2);
        model.setValueAt("Ceci est un exemple", 2, 0);
    }

    public static void main(final String[] args) {
        Runnable gui = new Runnable() {

            @Override
            public void run() {
                new MultilineCellsDemo().setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }

    class MyRenderer extends DefaultTableCellRenderer {

        private int row;
        private int column;
        private Object value;
        private JTable table;

        @Override
        public Component getTableCellRendererComponent(final JTable table,
                final Object value, final boolean isSelected,
                final boolean hasFocus, final int row, final int column) {
            this.table = table;
            this.value = value;
            this.row = row;
            this.column = column;
            return super.getTableCellRendererComponent(table,
                    value, isSelected, hasFocus, row, column);
        }

        @Override
        protected void paintComponent(final Graphics g) {
            int count = getLineCount();
            int f = 40 / count;
            String str = "";
            String[] strSplit = {""};
            try {
                str = value.toString();
                strSplit = str.split(" ");
            } catch (Exception e) {
            }
            if (count == 1) {
                g.drawString(str, 1, rowHeight / 2 + 4);
            } else {
                int i = 1;
                try {
                    for (; i < count; i++) {
                        g.drawString(strSplit[i - 1], 1, i * f);
                    }
                } catch (Exception e) {
                }
                String rest = "";
                for (int j = i; j <= strSplit.length; j++) {
                    rest += strSplit[j - 1] + " ";
                }
                g.drawString(rest, 1, i * f);
            }
        }

        private int getLineCount() {
            int result = 1;
            int columnLeft = column - 1;
            try {
                result = Integer.valueOf(table.getValueAt(row, columnLeft).toString()) + 1;
            } catch (Exception ex) {
            }
            if (result > 4) {
                result = 4;
                table.setValueAt(String.valueOf(result - 1), row, columnLeft);
            }
            return result;
        }
    }
}
3
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
26 déc. 2008 à 17:58
Nous pouvons faire un CellRenderer ou nous dessinons les cellules exactement comme nous le voulons.
0
cs_crashed Messages postés 8 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 18 janvier 2011
26 déc. 2008 à 22:48
Merci uhrand pour ta réponse mais peux tu m'écrire le programme afin de pouvoir dessiner les cellules comme je veux car je suis débutante en java.Merci d'avance..
0
cs_crashed Messages postés 8 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 18 janvier 2011
27 déc. 2008 à 20:16
merci beaucoup pour ta réponse [../auteur/UHRAND/779037.aspx uhrand]tu me sauves la vie
0
Rejoignez-nous