2011-01-07 5 views
11

Я создал jComboBox, но он занимает полную ширину рамки. как установить фиксированную ширину.JComboBox ширина

yes borderlayout для рамки и коробки для панели. Я добавляю код здесь:

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

Вы используете какие-либо макеты? –

+0

Я добавил свой код. пожалуйста, взгляните на это. –

+0

Переформатированный код; copyedited; пожалуйста, верните, если это неверно. – trashgod

ответ

16

Ширина автоматически определяется шириной самого большого элемента, добавленного в поле со списком. Вы можете управлять дисплеем с помощью:

comboBox.setPrototypeDisplayValue("text here"); 

Вы могли бы также рассмотреть возможность использования Combo Box Popup контролировать размер всплывающего.

Edit:

Поскольку вы добавили код, который показывает, вы используете BoxLayout вы можете попробовать следующее:

comboBox.setMaximumSize(comboBox.getPreferredSize()); 

Или вы можете сделать что-то вроде:

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

Читать из учебника Swing по адресу Using Layout Managers, чтобы понять, как работают эти предложения.

+0

Использование 'setPrototypeDisplayValue' с чувствительной опцией позволяет правильно изменять размер JComboBox, позволяя ему иметь другой размер в соответствии с определением контейнера. Благодаря! – Alfabravo

4

попробуйте comboBox.setPreferredWidth (200); или какое-либо другое значение для установки ширины

jzd является правильным. Фактический API: setPreferredSize(new Dimension(...));

+0

Я попытался, но дал эту ошибку. «Метод setPreferredWidth (int) не определен для типа JComboBox» –

+1

В API-интерфейсе указан точный метод: setPreferredSize (размер предпочтительного размера) – jzd

+0

, но каков код для установки ширины .... ?? ответьте –

1

Используйте другой LayoutManager. Попробуйте FlowLayout.

+0

, но какой код установить ширину .... ??ответьте –

+0

Ширина будет автоматически определяться на основе содержимого или использовать setPreferredSize() или предложение camickr. Но если вы поместите его в макет, который растягивает его, это не имеет значения. – jzd

0

Вот что вы можете сделать с макетом коробки.

  • Изменение оси оси линии, Добавить
  • горизонтальный клей, добавить жесткую область,
  • место компонент

. фрагмент кода ниже:

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

Вы можете использовать setSize() метод.

combo.setSize(200, combo.getPreferredSize().height); 
Смежные вопросы