Ширина ограничения Java для JPanel с GridBagLayout

Я написал программу для создания таблиц PDF. Чтобы упростить управление, я также создал графический интерфейс для управления вещами. Однако меня действительно беспокоит, что в JFrame этот JComboBox занимает много места, что делает правую подпанель излишне широкой.

Причина этого, вероятно, в том, что в поле со списком есть довольно длинная строка.

Я пробовал использовать «установить предпочтительный размер» для панели, но это не сработало. Затем я начал использовать GridBagLayout, чтобы попытаться сузить поле со списком. Есть ли способ ограничить все кнопки и поле со списком определенной шириной? Или я должен использовать другой макет?

Было бы лучше, если бы все компоненты на этой правой панели имели одинаковую ширину, как и сейчас.

Спасибо!

введите здесь описание изображения

вот мой код:

JTable studentTable=new JTable(new StudentTableModel(bro));
            studentTable.setRowHeight(25);
            studentTable.setGridColor(java.awt.Color.BLACK);
            DefaultTableCellRenderer centerRenderer = new     
DefaultTableCellRenderer();
            centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);

studentTable.getColumnModel().getColumn(2).setCellRenderer(centerRenderer);

studentTable.getColumnModel().getColumn(3).setCellRenderer(centerRenderer);

studentTable.getColumnModel().getColumn(5).setCellRenderer(centerRenderer);
        JPanel panelA1= new JPanel();
            panelA1.setOpaque(false);
            panelA1.setAlignmentX(Component.LEFT_ALIGNMENT);
            panelA1.setLayout(new GridBagLayout());

        JScrollPane scrollPaneA= new JScrollPane(studentTable);

        JButton buttonA1= new JButton("Activate All");

        JButton buttonA2= new JButton("Create Tables");

        JButton buttonA3= new JButton("Save File");

        JLabel labelA1= new JLabel("-Job Crews-");

        JButton buttonA4= new JButton("Deact Crew");

        JComboBox<Object> comboBoxA1=new JComboBox<Object>();
        comboBoxA1.addItem(new String("-N/A-"));
        for(JobCrew jj: crews)
        {
            comboBoxA1.addItem(jj);
        }
        comboBoxA1.setMaximumSize(new Dimension(100,100));

        GridBagConstraints c = new GridBagConstraints();
        {
            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 0;
            panelA1.add(buttonA1,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 1;
            panelA1.add(buttonA2,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 2;
            panelA1.add(buttonA3,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 3;
            panelA1.add(labelA1,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 4;
            panelA1.add(comboBoxA1,c);

            c.fill = GridBagConstraints.HORIZONTAL;
            c.gridx = 0;
            c.gridy = 5;
            panelA1.add(buttonA4,c);

        }

        JPanel panelA= new JPanel();
            panelA.setLayout(new BoxLayout(panelA,BoxLayout.X_AXIS));
            panelA.setOpaque(false);
            panelA.add(scrollPaneA); panelA.add(panelA1);
        //////
        /**********/
        tabs.addTab("Student info",null,panelA,"Organizes & displays student information");

person Ptolemorphism    schedule 18.09.2017    source источник
comment
Размер поля со списком (по умолчанию) равен ширине самого длинного элемента, это делает так, что поле со списком и соответствующее всплывающее окно имеют одинаковый размер ... почему, я бы знал - вероятно, так, когда вы выбираете элемент , он не усечен. Если вы выполните поиск в Google ширины всплывающего окна java jcombobox вы обнаружите, что это не редкость - проблема (которую я нашел) заключается в поиске решения, которое работает стабильно   -  person MadProgrammer    schedule 18.09.2017
comment
@MadProgrammer Спасибо за совет. Однако, хотя я понимаю, о чем вы говорите, я надеюсь, что ширина всплывающего окна может быть больше ширины поля со списком. Думаю, изменение ширины всплывающего окна не поможет?   -  person Ptolemorphism    schedule 18.09.2017
comment
Взгляните на результаты поиска Google, они сосредоточены на том, чтобы сделать поле со списком меньше, чем всплывающее окно, которое всегда будет размером самого длинного элемента ... что, исходя из моего понимания вашего вопроса, похоже, то, что вы пытаемся исправить - опять же, я никогда не находил решения, которое было бы согласовано на разных платформах или JVM   -  person MadProgrammer    schedule 18.09.2017
comment
@MadProgrammer Я попробовал то, что сказали вы и отвечающий ниже, и теперь он отлично работает! Я просто воспользовался этой ссылкой tips4java.wordpress.com/2010/11/ 28 / combo-box-popup и кажется универсальным решением этой проблемы. Большое спасибо!   -  person Ptolemorphism    schedule 18.09.2017


Ответы (1)


Посмотрите всплывающее окно со списком.

введите здесь описание изображения

Это позволит вам контролировать ширину самого поля со списком, а всплывающее окно может быть на всю ширину.

Или вы можете установить свойство, чтобы при необходимости во всплывающем окне отображалась полоса прокрутки.

person camickr    schedule 18.09.2017