Salut,

Je vais encore saouler tout le monde avec un problème de ScrollBar et de JTable.
J'ai déjà cherché à plusieurs endroits mais rien ne me permet de faire ce que je veux.
En fait j'ai une JTable avec deux colonne:
- une avec une CheckBox
- une autre avec une chaine de caractère

Je voudrais faire une JTable qui ne coupe pas la chaîne de caractère, mais qui affiche une scrollbar à la place. Mais je veux garder le auto_resize pour que la colonne soir redimensionnée si le scrollpane est plus grand que la table.

Je vous donne mon exemple de départ si ca peut vous aider à comprendre :
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
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.*;
 
public class TableDemo extends JPanel {
 
    public TableDemo() {
        super(new GridLayout(1,0));
 
        JTable table = new JTable(new MyTableModel());
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
 
        TableColumn column = null;
        for (int i = 0; i < 2; i++) {
            column = table.getColumnModel().getColumn(i);
            if (i == 0) {
            	column.setMaxWidth(100);
            	column.setPreferredWidth(50);
            } else {
            	column.setPreferredWidth(50);
            }
        }
 
        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        add(scrollPane);
    }
 
    class MyTableModel extends AbstractTableModel {
        private String[] columnNames = {"Available",
                                        "Title"};
        private Object[][] data = {
            {new Boolean(false),"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
            {new Boolean(false),"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},
            {new Boolean(false),"ccccccccccccc"},
            {new Boolean(false),"dddddddddddddddddddddddddd"},
            {new Boolean(false),"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"}
        };
 
        public int getColumnCount() {
            return columnNames.length;
        }
 
        public int getRowCount() {
            return data.length;
        }
 
        public String getColumnName(int col) {
            return columnNames[col];
        }
 
        public Object getValueAt(int row, int col) {
            return data[row][col];
        }
 
        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }
 
        public boolean isCellEditable(int row, int col) {
            if (col > 0) {
                return false;
            } else {
                return true;
            }
        }
 
        public void setValueAt(Object value, int row, int col) {
            data[row][col] = value;
            fireTableCellUpdated(row, col);
        }
    }
 
    public static void main(String[] args) {
        //Create and set up the window.
        JFrame frame = new JFrame("TableDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        //Create and set up the content pane.
        TableDemo newContentPane = new TableDemo();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);
 
        //Display the window.
        frame.pack();
        frame.setSize(400,200);
        frame.setVisible(true);
    }
}