Bonjour à tous,

Voilà, je me heurte à un petit problème :
Dans un Frame, j'ai un JTabbedPane avec différents onglets. A chaque changement de sélection d'onglet, il faudrait que je change la taille de mon TabbedPane pour qu'il colle au mieux au nouveau composant qu'il affiche.

J'ai commencé par un écrire ce pov' bout de code, histoire de voir si c'était réalisable sans trop de problème :

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
package javaapplication2;
 
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.*;
 
/**
 *
 * Test sur tabbed pane dont la taille préférentielle est la taille du composant couramment affiché
 *
 * @author Administrateur
 */   
 
public class TabbedPane extends JTabbedPane
{
    public TabbedPane()
    {   super(); }
 
    protected void fireStateChanged()
    {
        super.fireStateChanged();
 
        /** remove all components and add the component at the selected index */
        JComponent c = (JComponent)this.getSelectedComponent();
        Dimension d = c.getPreferredSize();
 
        Rectangle rec = this.getUI().getTabBounds(this, this.getSelectedIndex());
 
        d.height += rec.height - rec.y;
 
        this.setPreferredSize(d);
    }
 
    public static void main(String[] args)
    {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 
        JPanel contentPanel = new JPanel(new FormLayout("fill:pref:grow", "pref, pref, pref"));
        CellConstraints cc = new CellConstraints();
 
        final TabbedPane tabbed = new TabbedPane();
 
        JPanel panela = new JPanel(new FormLayout("pref", "pref, fill:pref:grow"));
        JButton button = new JButton("6FFFFFFFFFFFF");
        panela.add(button, cc.xy(1, 1));
        button.setPreferredSize(new Dimension(70, 20));
        button.setAlignmentY(0.0f);
 
        JPanel panel = new JPanel();
        BoxLayout layout2 = new BoxLayout(panel, BoxLayout.PAGE_AXIS);
        panel.setLayout(layout2);
        panel.add(new JButton("1AAAAAAAAAAAAAAA"));
        panel.add(new JButton("2BBBBBBBBBBBBBBB"));
        panel.add(new JButton("3CCCCCCCCCCCCCCC"));
        panel.add(new JButton("4DDDDDDDDDDDDDDD"));
        panel.add(new JButton("5EEEEEEEEEEEEEEE"));
 
        tabbed.addTab("b", panel);
        tabbed.addTab("a", panela);
 
        contentPanel.add(new JLabel("label de début"), cc.xy(1, 1, cc.LEFT, cc.TOP));
        contentPanel.add(tabbed, cc.xy(1, 2, cc.LEFT, cc.TOP));
        contentPanel.add(new JLabel("label de fin"), cc.xy(1, 3, cc.LEFT, cc.TOP));
 
        frame.setContentPane(contentPanel);
 
        frame.pack();
        frame.setVisible(true);
    }
}
Déjà, suis pas certain que ce soit cool de surcharger fireStateChanged pour ca mais bon... Le problème comme vous pouvez le constater, c'est de déterminer la taille à donner au TabbedPane en fonction du composant affiché...

quelqu'un a une idée?