2016-01-09 165 views
0

我无法设置JComboBox的高度,我在网上搜索但未找到正确的答案。设置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); 
    } 
+0

你可以发布程序的完整代码?使它更容易识别可能是错的! :) – Tjernquist1

+1

@ Tjernquist1 *“你可以发布程序的完整代码吗?”*哦,请不要!为了尽快提供更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 –

+1

'JButton button = new JButton(“CALCOLA”) public Dimension getPreferredSize()..'有更好的方法让按钮变大:1)给它一个大的'Font' 2)给它一个大的可能透明)图标。但我更喜欢的是.. 3)['setMargin(Insets)'](http://docs.oracle.com/javase/8/docs/api/javax/swing/AbstractButton.html#setMargin-java.awt .Insets-).. –

回答

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

您在组合框中添加到BorderLayout的中心,它得到的所有的额外空间框架。不要将组合框添加到CENTER中。

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

欲知更多信息,请阅读Swing的部分Layout Manager。重点是您可以使用不同的布局来嵌套多个面板,以实现所需的布局。