Ceci est assez simple. Il implique le calcul dynamique des différences entre les dimensions de vos pages et les utiliser pour forcer la taille préférée sur vous JTabbedPane
. J'ai fait une expérience rapide et ça a marché. Donc, au lieu de mettre beaucoup de texte ici - voici le code. Ce n'est pas parfait mais vous devriez avoir une idée. Les questions sont les bienvenues, bien sûr.
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Test {
private static int maxW = 0;
private static int maxH = 0;
public static void main(String[] args) {
final JFrame f = new JFrame();
final JTabbedPane tabs = new JTabbedPane();
tabs.add(createPanel(Color.RED, 100, 100), "Red");
tabs.add(createPanel(Color.GREEN, 200, 200), "Green");
tabs.add(createPanel(Color.BLUE, 300, 300), "Blue");
final Dimension originalTabsDim = tabs.getPreferredSize();
tabs.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
Component p = ((JTabbedPane) e.getSource()).getSelectedComponent();
Dimension panelDim = p.getPreferredSize();
Dimension nd = new Dimension(
originalTabsDim.width - (maxW - panelDim.width),
originalTabsDim.height - (maxH - panelDim.height));
tabs.setPreferredSize(nd);
f.pack();
}
});
f.setContentPane(tabs);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private static final JPanel createPanel(Color color, int w, int h) {
JPanel p = new JPanel();
p.setBackground(color);
p.setPreferredSize(new Dimension(w, h));
maxW = Math.max(w, maxW);
maxH = Math.max(h, maxH);
return p;
}
}
Ok, cela fonctionne très bien (même avec scala-swing) mais est-ce possible de le faire sans régler la largeur et la hauteur du panneau? – teamon
Paquets d'images à la taille préférée de son contenu. Vous pouvez avoir une page de contenu distincte (avec le volet à onglets intégré) et définir la dimension préférée à la place du volet à onglets lui-même, mais vous devez le définir à quelque chose. –