设置JComboBox高度

时间:2016-01-09 13:43:00

标签: java swing layout-manager

我无法设置JComboBox的高度,我在网上搜索但未找到正确答案。

从下图中可以看出,组合框几乎填满了所有面板高度,我希望它的高度更小。

我尝试使用getPreferredSize()方法设置大小,但它不起作用,它仅适用于其他组件,如按钮。

enter image description here

我的代码

  private JComponent firstPanel() 
  {       
        JPanel panel = new JPanel();        


    panel.setLayout(new BorderLayout());
    JLabel spesaAnnuaSingola = new JLabel();
    spesaAnnuaSingola.setText("Spesa Annua Singola");
    panel.add(spesaAnnuaSingola, BorderLayout.NORTH);

    JComboBox<String> listaSpese = new JComboBox<String>();
    panel.add(listaSpese, BorderLayout.CENTER);

    JTextField speseAnnuaSingolaTF = new JTextField();
    speseAnnuaSingolaTF.setText("");
    speseAnnuaSingolaTF.setEditable(false); 
    panel.add(speseAnnuaSingolaTF, BorderLayout.LINE_START);

    JButton button = new JButton("CALCOLA") 
    {
           public Dimension getPreferredSize() 
           {
                  return new Dimension(150,50);
            };
    };

    JPanel leftflowpanel = new JPanel( new FlowLayout(FlowLayout.LEFT) );
    leftflowpanel.add(speseAnnuaSingolaTF);
    panel.add(leftflowpanel, BorderLayout.SOUTH);

    JPanel rightflowpanel = new JPanel( new FlowLayout(FlowLayout.RIGHT) );
    rightflowpanel.add(button);
    panel.add(rightflowpanel, BorderLayout.SOUTH);

    return panel;   
}

然后:

public StatsPanel()
{
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      this.setExtendedState(JFrame.MAXIMIZED_BOTH);     
      GridBagConstraints c = new GridBagConstraints();
      // I will need a grid layout 
      this.setLayout(new GridLayout(1, 1, 30, 30)); 
      JPanel panelLeft = new JPanel(new BorderLayout());
      panelLeft.setBorder(BorderFactory.createEmptyBorder(20, 10, 20, 50));
      panelLeft.add(firstPanel(), BorderLayout.NORTH);

      c.fill = GridBagConstraints.VERTICAL;
      c.gridx = 0;
      c.gridy = 0;
      this.add(panelLeft);
  }

1 个答案:

答案 0 :(得分:1)

JComboBox<String> listaSpese = new JComboBox<String>();
panel.add(listaSpese, BorderLayout.CENTER);

将组合框添加到BorderLayout的CENTER,它可以获得帧的所有额外空间。不要将组合框添加到CENTER。

相反,您需要嵌套面板。因此,为BorderLayout的NORTH创建一个面板。然后,此面板将包含您的标签和组合框。也许在这个面板上使用垂直BoxLayout。然后标签和组合框都将以其首选高度显示。

阅读Layout Manager上的Swing部分以获取更多信息。关键是你可以使用不同的布局嵌套多个面板,以实现所需的布局。