2011-01-07 13 views
11

Ho creato un jComboBox ma occupa tutta la larghezza del frame. come impostare la larghezza fissa.JComboBox width

yes borderlayout per il layout del riquadro e della cornice per il pannello. sto aggiungendo il codice qui:

import javax.swing.*; 
import java.awt.BorderLayout; 

public class Window8 { 

    JFrame frame; 
    JPanel panel; 
    JComboBox combo; 
    public void go(){ 

    String[] option = { "STUDENT", "TEACHER" }; 

    combo.setPreferredSize(new Dimension(1,25)); 
    combo = new JComboBox(option); 
    menu.setSelectedIndex(0); 

    frame = new JFrame("DELETION"); 
    frame.setLocationRelativeTo(null); 
    frame.setSize(400, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 

    panel = new JPanel(); 
    panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS)); 

    frame.getContentPane().add(BorderLayout.NORTH,panel); 
    panel.add(combo); 
} 
+0

stai usando qualsiasi layout? –

+0

ho aggiunto il mio codice. per favore dai un'occhiata. –

+0

Codice riformattato; copyedited; per favore, ripristina se non è corretto. – trashgod

risposta

16

La larghezza viene determinata automaticamente dalla larghezza dell'elemento più grande aggiunto alla casella combinata. È possibile controllare la visualizzazione tramite:

comboBox.setPrototypeDisplayValue("text here"); 

Si potrebbe anche considerare l'uso del Combo Box Popup per controllare la dimensione pop-up.

Edit:

Dal momento che è stato aggiunto il codice che mostra che si sta utilizzando un BoxLayout si può provare il seguente:

comboBox.setMaximumSize(comboBox.getPreferredSize()); 

Oppure si può fare qualcosa di simile:

JPanel wrapper = new JPanel(); 
wrapper.add(comboBox); 
panel.add(wrapper); 

Leggi la sezione del tutorial Swing su Using Layout Managers per capire come funzionano questi suggerimenti.

+0

L'utilizzo di 'setPrototypeDisplayValue' con un'opzione sensibile aiuta a ridimensionare correttamente il JComboBox permettendogli di avere una dimensione diversa in base alla definizione del contenitore. Grazie! – Alfabravo

4

provare comboBox.setPreferredWidth (200); o qualche altro valore per impostare la larghezza

jzd ha ragione. L'API reale è setPreferredSize(new Dimension(...));

+0

ho provato ma dà questo errore. "Il metodo setPreferredWidth (int) non è definito per il tipo JComboBox" –

+1

Guardando nelle API, il metodo esatto è: setPreferredSize (Dimension PreferredSize) – jzd

+0

ma qual è il codice per impostare la larghezza .... ?? si prega di rispondere –

1

Utilizzare un LayoutManager differente. Prova FlowLayout.

+0

ma qual è il codice per impostare la larghezza .... ??per favore rispondi allo –

+0

La larghezza sarà determinata automaticamente in base al contenuto o usare setPreferredSize() o suggerimento di camickr. Ma se lo metti in un layout che si estende non importa. – jzd

0

Ecco qualcosa che puoi fare con il layout della scatola.

  • Change asse alla linea, Aggiungere
  • colla orizzontale, Aggiungere superficie rigida,
  • posto componente

. frammento di codice di seguito:

panel = new JPanel(); 
panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS)); 
panel.add(Box.createHorizontalGlue()); 
panel.add(Box.createRigidArea(new Dimension(10, 0))); 
panel.add(combo); 
frame.getContentPane().add(BorderLayout.NORTH, panel); 
2

Si potrebbe desiderare di utilizzare setSize() metodo.

combo.setSize(200, combo.getPreferredSize().height);