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.
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
Vous devez vous connecter pour publier un commentaire.
Finalement, j'ai trouvé une solution facile:
Et fonctionne parfaitement pour ce que je voulais
OriginalL'auteur Roman Rdgz
Au point avant d'ajouter la
JComboBox
à jpanel1, essayez de définir lafill
attribut de laGridBagConstraints
àNONE
(plutôt queBOTH
). Cela devrait (on l'espère) d'empêcher la combo-box à partir de redimensionnement.OriginalL'auteur Adamski
NetBeans fait pour vous avec un couple de cases à cocher dans le volet droit du menu contextuel du bouton: Auto Redimensionnement -> Horizontale et Verticale.
Je me suis tourné sur eux et par rapport NetBeans code généré dans mon contrôle de révision de l'histoire. Il y avait un nombre surprenant de changements que je ne pourrais pas se rapportent à la taille du composant mais je ne vois changements dans la façon dont la zone de liste modifiable a été ajouté à ça contenant de la mise en page du groupe. essentiellement,
a été changé pour
JComboBox.setPreferredSize()
n'est jamais explicitement appelé, donc je suppose que vous obtenez de meilleurs résultats de dire la mise en page du gestionnaire de la taille préférée et re-propriétés de taille, plutôt que de dire la JComboBox et en espérant que le layout manager lit ces propriétés derrière les coulisses.(en passant, par
....addComponent()
, je veux direaddComponent()
est appelé dans une longue cascade de séquence decreateParallelGroup()
etcreateSequentialGroup()
, en commençant avec unnew javax.swing.GroupLayout(myPanel)
. J'ai présenté le court formulaire ci-dessus parce que je ne voulais pas entrer dans le nitty gritty de l'auto-générés NetBeans de code, je ne pouvais pas commencer à écrire manuellement ou à l'expliquer. Vous voulez l'ensemble de la chose? Vous ne pouvez pas gérer l'ensemble de la chose! ici, il est:)
OriginalL'auteur PMorganCA