Fix JComboBox largeur

J'ai un JComboBox, avec certaines options. Quand je fais une sélection à un autre composant, je vais changer les JComboBox contenu. J'ai d'abord appeler le removeAllItems() méthode, puis-je ajouter un par un les Cordes j'ai besoin maintenant.

Le problème est, par défaut, j'ai eu quelques options, et l'un d'eux était le plus grand du texte, de sorte JComboBox eu la largeur il fallait montrer que l'option correctement. Lorsque je change la JComboBox contenu, le texte de l'option est parti, et maintenant, un petit texte est de donner la largeur de la JComboBox, alors quand j'ai changer le contenu, il devient plus petit.

Ma première approche a été d'appeler myComboBox.setPreferredSize(myComboBox.getSize()) et puis ses dimensions sont fixes, mais pas correctement: il devient un peu plus petit en hauteur et en largeur. Je pense que c'est parce que je suis en utilisant Nimbus Look&Feel, et les dimensions que je reçois de la getSize() méthode sont ceux donnés par le Java par défaut Look%à se Sentir.

J'ai aussi essayé myCombo.setPreferredSize(new Dimension(myCombo.getHeight(), myCombo.getWidth())) avec les mêmes résultats.

Comment puis-je aborder ce problème?

- Je ajouter un code d'exemple de la façon dont je suis en utilisant la Mise en page:

    private String[] comboEventDOutputStrings = { "Run", "Stop", "Pause", "Conditioning time", "Deposition time", "Equilibration time", "Measurement time"};
private String[] comboEventDInputStrings = { "Run", "Stop", "Pause"};
//The first String array is the default set of values. It's obvious that the JComboBox will get smaller
//when I change to the second array of contents
//...   
JPanel pane = new JPanel(new GridBagLayout());
JPanel jPanelExterno = new JPanel(new GridBagLayout());
GridBagConstraints cExterna = new GridBagConstraints();
GridBagConstraints c = new GridBagConstraints();
Border loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
jPanelExterno.setBorder(loweredetched);
jPanelExterno.setName("");
cExterna.fill = GridBagConstraints.BOTH;
cExterna.anchor = GridBagConstraints.NORTH;
cExterna.gridx = 0;
cExterna.gridy = 0;
cExterna.insets = new Insets(10,10,5,5);
JPanel jPanel1 = new JPanel(new GridBagLayout());
jPanel1.setBorder(loweredetched);
jPanel1.setName("PIO 1");
jCheckBox1 = new JCheckBox("Enable");
jCheckBox1.setSelected(false);
jCheckBox1.setName("1");
jCheckBox1.addActionListener(new PIOCheckListener());
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.NORTH;
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(10,5,10,10);
jPanel1.add(jCheckBox1, c);
c.gridy++;
c.insets = new Insets(5,10,5,5);
JLabel label1 = new JLabel("IO Type");
jPanel1.add(label1, c);
c.gridx++;
c.insets = new Insets(5,5,5,10);
combo1 = new JComboBox(comboIOTypeStrings);
combo1.setEnabled(false);
combo1.setSelectedIndex(0);
combo1.setName("1");
combo1.addActionListener (new PIOComboListener());
jPanel1.add(combo1, c);
c.gridy++;
c.insets = new Insets(5,10,5,5);
c.gridx=0;
JLabel label2 = new JLabel("Active level");
jPanel1.add(label2, c);
c.gridx++;
c.insets = new Insets(5,5,5,10);
combo2 = new JComboBox(comboActiveLevelStrings);
combo2.setEnabled(false);
combo2.setSelectedIndex(0);
jPanel1.add(combo2, c);
c.gridy++;
c.insets = new Insets(5,10,5,5);
c.gridx=0;
JLabel label3 = new JLabel("Event");
jPanel1.add(label3, c);
c.gridx++;
c.insets = new Insets(5,5,10,10);
combo3 = new JComboBox(comboEventDOutputStrings);
combo3.setEnabled(false);
combo3.setSelectedIndex(0);
jPanel1.add(combo3, c);
c.gridy++;
c.insets = new Insets(5,10,5,5);
c.gridx=0;
JLabel label4 = new JLabel("Node");
jPanel1.add(label4, c);
c.gridx++;
c.insets = new Insets(5,5,10,10);
combo4 = new JComboBox(comboNodeStrings);
combo4.setEnabled(false);
combo4.setSelectedIndex(0);
jPanel1.add(combo4, c);
jPanelExterno.add(jPanel1, cExterna);
pioDialog.add(pane);
pioDialog.pack();
pioDialog.setLocationRelativeTo(null);
pioDialog.setVisible(true);
//...
}   
class PIOComboListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent a) {
JComboBox cb = (JComboBox)a.getSource();
JComboBox target1 = null;
JComboBox target2 = null;
JComboBox target3 = null;
switch(Integer.parseInt(cb.getName())){
case 1:
target1 = combo2;
target2 = combo3;
target3 = combo4;
break;
default:
Register.debug("PIODialog error: No target for comboBoxes");
break;
}
if(cb.getSelectedIndex()==2){ //Analog input
target1.setEnabled(false);
target2.setEnabled(false);
target3.setEnabled(false);
}
else{
target1.setEnabled(true);
target2.setEnabled(true);
target3.setEnabled(true);
target2.removeAllItems();
if(cb.getSelectedIndex()==0){
for(int i=0; i<comboEventDOutputStrings.length; i++)
target2.addItem(comboEventDOutputStrings[i]);
} else {
for(int i=0; i<comboEventDInputStrings.length; i++)
target2.addItem(comboEventDInputStrings[i]);
}
}
}
}

C'est essentiellement un GridBagLayout avec 6 un Composite avec une nouvelle GridBagLayout pour chacun d'eux. J'ai juste écrit jPanel1 ici, pour simplifier les choses. J'espère qu'il n'est pas très salissant.

Cela pourrait être lié à la mise en page manager, vous êtes en utilisant, comme ils traitent les attributs tels que la taille préférée différemment. Pouvez-vous poster quelques de code montrant comment vous êtes en train d'ajouter le composant à son Conteneur parent?
Rdgz question, vous souhaitez redimensionner JComboBox dans le Conteneur ou de ses Popup ou les deux
Je suis en utilisant le GridBagLayout. Est-ce que c', ou encore besoin d'un exemple de code?
Je vais essayer de m'expliquer mieux: je veux la JComboBox pour rester à la largeur, elle est automatiquement à partir de son contenu par défaut (ceux révélé quand vous popup).
que pas sscce, j'ai supprimé mon post

OriginalL'auteur Roman Rdgz | 2011-10-19