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()方法。组件的任务是确定其自己的首选大小。