JTabbedPane Taille automatique
Bonjour, je voudrais adapter la taille de deux sous panels à celui d'un panel principal.
Le panel principal s'appel panTabs et les sous panels HDMT et NEMO (sont de même structure).
Cependant quand je set la taille du panel principale puis crée une méthodes getTabsSize() pour récupérer le get il me met un nullpointer.
Classe qui créer le panel principale auquel on ajoute les sous panel :
Code:
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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
package IHM;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import EVENT.ActionWindow;
import TABBED.TabHDMT;
import TABBED.TabNEMO;
/**
* IHM of Converter application
*
* @author t0163126
*/
public class IhmConverter extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel panCustomer;
private JPanel panTab;
private static ToolBar toolBar;
private static JTabbedPane tabs;
private static TabHDMT HDMT;
private static TabNEMO NEMO;
private int maxW = 0;
private int maxH = 0;
private static Dimension panelDim;
private Dimension newDim;
// ============================================================
/**
* Ihm constructorr
*/
private IhmConverter() {
initIhmConverter();
}
/**
* Method initialization
*/
private void initIhmConverter() {
// window event
this.addWindowListener(new ActionWindow());
HDMT = new TabHDMT();
NEMO = new TabNEMO();
tabs = new JTabbedPane(SwingConstants.NORTH);
// Add tabs
tabs.add("HDMT", HDMT);
tabs.add("NEMO", NEMO);
tabs.setOpaque(true);
tabs.setMnemonicAt(0, KeyEvent.VK_H); //ALT+H
tabs.setMnemonicAt(1, KeyEvent.VK_N); //ALT+N
// Dimension
final Dimension originalTabsDim = tabs.getPreferredSize();
panelDim = new Dimension();
tabs.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
Component p = ((JTabbedPane) e.getSource()).getSelectedComponent();
panelDim = p.getPreferredSize();
newDim = new Dimension(originalTabsDim.width
- (maxW - panelDim.width), originalTabsDim.height
- (maxH - panelDim.height));
tabs.setPreferredSize(newDim);
tabs.setSelectedComponent(p);
tabs.getSelectedComponent().setPreferredSize(newDim);
pack();
}
});
panTab = new JPanel();
panTab.setLayout(new FlowLayout());
panTab.add(tabs);
// Customer area
panCustomer = (JPanel) this.getContentPane();
panCustomer.setLayout(new BorderLayout());
panCustomer.add(panTab, BorderLayout.BEFORE_LINE_BEGINS);
// Add toolBar
toolBar = new ToolBar();
this.add(toolBar, BorderLayout.NORTH);
}
// ============================================================
// instenciation
private static IhmConverter hdmt;
public static IhmConverter getInstance() {
if (hdmt == null) {
hdmt = new IhmConverter();
}
return hdmt;
}
// ============================================================
// Getter and setter
public static Dimension getTabsSize() {
Dimension taille = IhmConverter.tabs.getSelectedComponent().getPreferredSize();
return taille;
}
public static TabHDMT getHDMT() {
return IhmConverter.HDMT;
}
public static TabNEMO getNEMO() {
return IhmConverter.NEMO;
}
public static ToolBar getToolBar() {
return IhmConverter.toolBar;
}
} |
Puis le sous panel :
Code:
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
|
package TABBED;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import IHM.IhmConverter;
/**
* HDMT tab that recover all sub tabHDMT that suits him
* @author t0163126
*/
public class TabHDMT extends JPanel
{
private static final long serialVersionUID = 1L;
/**
* HDMT constructor
*/
public TabHDMT()
{
//Title of tab
this.setBorder(BorderFactory.createTitledBorder("HDMT"));
this.setBackground(Color.LIGHT_GRAY);
this.setOpaque(true);
JPanel panel = new JPanel();
System.out.println(IhmConverter.getTabsSize());
panel.setPreferredSize(IhmConverter.getTabsSize());
this.add(panel);
}
} |
Merci d'avance :) :)