Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JPanel中创建JCombox时,是否可以控制每个JCombox的大小(特别是高度)_Java_Javascript_Swing_Jpanel_Jcombobox - Fatal编程技术网

Java 在JPanel中创建JCombox时,是否可以控制每个JCombox的大小(特别是高度)

Java 在JPanel中创建JCombox时,是否可以控制每个JCombox的大小(特别是高度),java,javascript,swing,jpanel,jcombobox,Java,Javascript,Swing,Jpanel,Jcombobox,我创建了一个JPanel,在其中我创建了不同数量的jcombobox。放入的jComboxes的数量取决于手头的各种情况 我遇到的问题是,当我创建这些jComboxes时,它们会自动适应JPanel的全尺寸,请参见下面的图片 JComboBox被创建,它占用了整个JPanel()“> 我有没有办法修复这个JComboBox的大小,使它小于JPanel的完整大小 后续信息 谢谢你的关心和帮助 我使用的是Netbeans开发工具。我首先创建了一个JScrollPanel,然后使用Netbeans

我创建了一个
JPanel
,在其中我创建了不同数量的
jcombobox
。放入的
jComboxes
的数量取决于手头的各种情况

我遇到的问题是,当我创建这些
jComboxes
时,它们会自动适应
JPanel
的全尺寸,请参见下面的图片

JComboBox被创建,它占用了整个JPanel()“>

我有没有办法修复这个
JComboBox
的大小,使它小于
JPanel
的完整大小


后续信息


谢谢你的关心和帮助

我使用的是Netbeans开发工具。我首先创建了一个JScrollPanel,然后使用Netbeans将JPanel放在这个JScrollPanel中,这将在initComponents()中的不可编辑代码中创建它们

我可以为此提供所有代码,但这是一个相当大的数量,可能没有用处,它开始:

    jScrollPane = new javax.swing.JScrollPane();
    isotopePanel = new javax.swing.JPanel();

    jScrollPane.setBorder(javax.swing.BorderFactory.createTitledBorder("Isotope Details"));

    isotopePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
    isotopePanel.setAutoscrolls(true);

    javax.swing.GroupLayout isotopePanelLayout = new javax.swing.GroupLayout(isotopePanel);
    isotopePanel.setLayout(isotopePanelLayout);
    isotopePanelLayout.setHorizontalGroup(
        isotopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 755, Short.MAX_VALUE)
    );
    isotopePanelLayout.setVerticalGroup(
        isotopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 356, Short.MAX_VALUE)
    );

    jScrollPane.setViewportView(isotopePanel);

    .....
在我的代码中,在AboutDisplay()中,我在一个名为LabelsAndCombos的数组中为它们创建了JComboBox和标签,然后使用以下代码将它们放入Jpanel中:

    javax.swing.GroupLayout isotopesLayout = new javax.swing.GroupLayout(isotopePanel);   

    isotopesLayout.setAutoCreateGaps(true);
    isotopesLayout.setAutoCreateContainerGaps(true);

    javax.swing.GroupLayout.SequentialGroup hGroup = isotopesLayout.createSequentialGroup();
    javax.swing.GroupLayout.SequentialGroup vGroup = isotopesLayout.createSequentialGroup();

    GroupLayout.ParallelGroup labelGroup = isotopesLayout.createParallelGroup();
    GroupLayout.ParallelGroup comboBoxGroup = isotopesLayout.createParallelGroup();
    for(int i=0;i<calcDef.getAtomLabels().length;i++){
        labelGroup.addComponent(labelsAndCombos[i].label);
        comboBoxGroup.addComponent(labelsAndCombos[i].combo);
        vGroup.addGroup(isotopesLayout.createParallelGroup().addComponent(labelsAndCombos[i].label).addComponent(labelsAndCombos[i].combo));
    }

    hGroup.addGroup(labelGroup);
    hGroup.addGroup(comboBoxGroup);

    isotopesLayout.setHorizontalGroup(hGroup);
    isotopesLayout.setVerticalGroup(vGroup);

    isotopePanel.setLayout(isotopesLayout);
javax.swing.GroupLayout同位素布局=新的javax.swing.GroupLayout(同位素面板);
SotopesLayout.setAutoCreateGaps(真);
setAutoCreateContainerGaps(true);
javax.swing.GroupLayout.SequentialGroup hGroup=SototesLayout.createSequentialGroup();
javax.swing.GroupLayout.SequentialGroup vGroup=isotoseLayout.CreateSquentialGroup();
GroupLayout.ParallelGroup labelGroup=同位素布局。createParallelGroup();
GroupLayout.ParallelGroup ComboxGroup=SotoseLayout.createParallelGroup();

对于(int i=0;i),您可能使用<代码> GridLayout < /代码>来指定面板中元素的大小。考虑在<代码> jPanel < /代码>中使用不同的布局,例如<代码> GridBagLayout < /代码>。例如:

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import javax.swing.JComboBox;
import java.awt.Insets;


public class IsotopeDetails extends JFrame {
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    IsotopeDetails frame = new IsotopeDetails();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public IsotopeDetails() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);
        GridBagLayout gbl_panel = new GridBagLayout();
        gbl_panel.columnWidths = new int[]{0, 0, 0};
        gbl_panel.rowHeights = new int[]{0, 0};
        gbl_panel.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
        gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
        panel.setLayout(gbl_panel);

        JLabel lblIsotopeDetails = new JLabel("Isotope Details");
        GridBagConstraints gbc_lblIsotopeDetails = new GridBagConstraints();
        gbc_lblIsotopeDetails.insets = new Insets(0, 0, 0, 5);
        gbc_lblIsotopeDetails.anchor = GridBagConstraints.EAST;
        gbc_lblIsotopeDetails.gridx = 0;
        gbc_lblIsotopeDetails.gridy = 0;
        panel.add(lblIsotopeDetails, gbc_lblIsotopeDetails);

        JComboBox comboBox = new JComboBox();
        GridBagConstraints gbc_comboBox = new GridBagConstraints();
        gbc_comboBox.fill = GridBagConstraints.HORIZONTAL;
        gbc_comboBox.gridx = 1;
        gbc_comboBox.gridy = 0;
        panel.add(comboBox, gbc_comboBox);

        pack();
    }

}


为所需布局使用适当的布局管理器。有关更多信息和示例,请阅读上Swing教程中的部分。一些布局管理器尊重组件的大小,而其他布局管理器则不尊重组件的大小

您仍然可以对一个面板使用
GridLayout
,但可以将该面板嵌套在另一个使用
FlowLayout
的面板中。类似于:

JPanel comboBoxes = new JPanel( new GridLayout(0, 1) );
comboBoxes.add( comboBox1 );
comboBoxes.add( comboBox2 );

JPanel wrapper = new JPanel();
wrapper.add( comboBoxes );

frame.add( wrapper );

布局管理器您的选择取决于您的具体要求。

非常感谢您的帮助!@user3602112如果此答案解决了您的问题,请告知其他人问题已解决。欢迎使用Stack Overflow!非常感谢您的帮助!您是对的,我使用的是GroupLayout。我在这方面受到限制,因为我使用的是JPanel表单使用Netbeans开发工具,当我创建JPanel时,它会自动创建GroupLayout。我知道JComboBox的大小可以使用函数框来更改。setPreferredSize(size)。我可以用它使我的JComboBox比JPanel更大……但不幸的是,它并没有变小。
我在这方面受到限制,因为我使用的是使用Netbeans开发工具的JPanel表单
-不要使用开发工具来创建GUI。花时间学习Java和如何使用布局管理器,而不是学习如何使用工具您编写代码。
我知道JComboBox的大小可以使用函数框进行更改。setPreferredSize(size)。
您不应该使用setPreferredSize()方法。组件的任务是确定其自己的首选大小。