2016-03-08 61 views
1
  1. 我试图动态地将组合框添加到JPanel,但组合框占据整个面板。根据组合框计数组合框的大小正在改变,但我想要固定大小的组合框,我需要创建组合框一个接一个的方式在另一个组合框/在一个新的行。
  2. 如何在面板中设置组件的位置。动态添加组件到JPanel更改组件大小

    JComboBox startDate = new JComboBox(); 
    startDate.setPreferredSize(new Dimension(80,25)); 
    jPanelStartDate.add(startDate); 
    jPanelStartDate.setLayout(new GridLayout(0, 3, 10, 10)); 
    jPanelStartDate.revalidate(); 
    
+0

你可以显示你的JPanel甚至JFrame的代码吗?如果不是,我们只能通过猜测来诊断。 – user3437460

+0

1)为了更好地提供帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 2)请参阅[我是否应避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)(是。).. –

+0

.. 3 )Java GUI必须在不同的语言环境中使用不同的PLAF来处理不同的操作系统,屏幕大小,屏幕分辨率等。因此,它们不利于像素的完美布局。请使用布局管理器或[它们的组合](http://stackoverflow.com/a/5630271/418556)以及[white space]的布局填充和边框(http://stackoverflow.com/a/17874718/ 418556)。 4)每个线程提出一个问题。 SO是一个问答网站,而不是帮助台。 –

回答

0

好吧,你有一个以上的选项。您可以使用带有Y_Axis和rigid areaBoxLayout,或者您可以使用更高级的复杂动态GridBagLayout。以下是BoxLayout和刚性区域的示例。

JFrame frame = new JFrame("Test"); 
JPanel panel = new JPanel(); 

BoxLayout boxLayout = new BoxLayout(panel, BoxLayout.Y_AXIS); 
panel.setLayout(boxLayout); 

for(int index = 0; index < 5; ++index){ 

     JComboBox<String> box = new JComboBox<>(new String[]{"a", "b", "c"}); 

     box.setMaximumSize(new Dimension(50, 50)); 
     box.setMinimumSize(new Dimension(50, 50)); 

     panel.add(box); 

     panel.add(Box.createRigidArea(new Dimension(10, 10))); 
} 

frame.setContentPane(panel); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setSize(new Dimension(300, 300)); 
frame.setVisible(true); 

您可以根据需要更改尺寸,特别是刚性区域的尺寸,以调整组件的空间和尺寸。

+0

现在它不占用完整的面板,但同样的问题。基于组合框的大小正在改变。一旦它达到最小尺寸,剩余的大小,因为它虽然组合框添加,我想要添加组合框垂直.Grid布局水平添加。我已经使用了框布局,但组合框占据了完整的面板,并且两个combo's.jPanelStartDate.setLayout(新BoxLayout(jPanelStartDate,BoxLayout.Y_AXIS))之间没有空格。 – suma2020

+0

@ suma2020我根据你的评论调整了我的答案。请看现在答案是否更有帮助。 – m1o2