2011-01-07 10 views
11

He creado un jComboBox pero toma todo el ancho del marco. cómo establecer el ancho fijo.JComboBox ancho

yes borderlayout para el diseño del marco y la caja para el panel. Estoy agregando el código aquí:

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

¿Estás usando algún diseño? –

+0

he agregado mi código. Por favor, mire esto. –

+0

Código reformateado; corregido; por favor revertir si es incorrecto. – trashgod

Respuesta

16

El ancho viene determinado automáticamente por el ancho del elemento más grande agregado al cuadro combinado. Se puede controlar la pantalla mediante el uso de:

comboBox.setPrototypeDisplayValue("text here"); 

También puede considerar el uso de la Combo Box Popup para controlar el tamaño emergente.

Editar:

Dado que el código que muestra que está utilizando un BoxLayout que pueden intentar lo siguiente añadido:

comboBox.setMaximumSize(comboBox.getPreferredSize()); 

O puede hacer algo como:

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

Lea la sección del tutorial de Swing en Using Layout Managers para entender cómo funcionan estas sugerencias.

+0

El uso de 'setPrototypeDisplayValue' con una opción sensible ayuda a redimensionar correctamente el JComboBox al tiempo que permite que tenga un tamaño diferente según la definición del contenedor. ¡Gracias! – Alfabravo

4

try comboBox.setPreferredWidth (200); o algún otro valor para establecer el ancho

jzd es correcto. La API actual es setPreferredSize(new Dimension(...));

+0

intenté pero proporcioné este error. "El método setPreferredWidth (int) no está definido para el tipo JComboBox" –

+1

Al buscar en la API, el método exacto es: setPreferredSize (Dimension preferredSize) – jzd

+0

pero ¿cuál es el código para establecer el ancho ... ?? por favor responda –

1

Utilice un LayoutManager diferente. Pruebe FlowLayout.

+0

, pero ¿cuál es el código para establecer el ancho .... ??por favor, responda –

+0

El ancho se determinará automáticamente en función del contenido o use setPreferredSize() o la sugerencia de camickr. Pero si lo pones en un diseño que se extiende, no importará. – jzd

0

Aquí hay algo que puede hacer con el diseño de la caja.

  • Cambio eje a eje de la línea, Añadir
  • cola horizontal, Añadir área rígida,
  • lugar el componente

. fragmento de código a continuación:

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

Es posible que desee utilizar setSize() método.

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