Ширина JComboBox - PullRequest
       14

Ширина JComboBox

12 голосов
/ 07 января 2011

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

да 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);   
}

Ответы [ 6 ]

18 голосов
/ 07 января 2011

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

comboBox.setPrototypeDisplayValue("text here");

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

Edit:

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

comboBox.setMaximumSize( comboBox.getPreferredSize() );

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

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

Прочтите раздел из учебника по Swing на Использование менеджеров по расположению , чтобы понять, как работают эти предложения.

5 голосов
/ 07 января 2011

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

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

1 голос
/ 29 января 2013

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

combo.setSize(200, combo.getPreferredSize().height);
1 голос
/ 08 января 2011

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

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

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

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);
1 голос
/ 07 января 2011

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

0 голосов
/ 10 октября 2011

Это сработало очень хорошо для меня:

http://www.java2s.com/Code/Java/Swing-Components/SteppedComboBoxExample.htm

...