JPanel中的JButtons占用太多空间

时间:2017-07-05 15:20:12

标签: java swing jpanel jbutton gridbaglayout

我的某些按钮和面板有问题。我创建了一个带有GridBagLayout 6x1的JPanel。

        GraphicPaintedPanel deck = new GraphicPaintedPanel();
        GridBagLayout gblDecks = new GridBagLayout();                                               
        gblDecks.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0};
        gblDecks.rowHeights = new int[]{0, 0};
        gblDecks.columnWeights = new double[]{0.15, 0.15, 0.15, 0.15, 0.15, 0.15, Double.MIN_VALUE};
        gblDecks.rowWeights = new double[]{1.0, Double.MIN_VALUE};
        deck.setLayout(gblDecks);

当我尝试向这个面板添加按钮时会出现问题,因为它们根据它们的数量占用空间,即使它们应该具有固定的大小。例如,如果我

            for(int j=0; j<4; j++){
            JButton activate= new JButton("ACTIVATE LEADER CARD");
            GridBagConstraints gbcActivate = new GridBagConstraints();
            gbcActivate.gridx = j;
            gbcActivate.fill = GridBagConstraints.BOTH;
            deck.add(activate, gbcActivate);
            }

我创建了4个按钮,面板应该有4个按钮和2个#34;空格&#34;。但相反,它有4个按钮可以占用所有空间。enter image description here

如果我这样做

            for(int j=0; j<6; j++){
            JButton activate= new JButton("ACTIVATE LEADER CARD");
            GridBagConstraints gbcActivate = new GridBagConstraints();
            gbcActivate.gridx = j;
            gbcActivate.fill = GridBagConstraints.BOTH;
            deck.add(activate, gbcActivate);
            }

我得到的是enter image description here

不应该修复尺寸吗?任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

gbcActivate.fill = GridBagConstraints.BOTH

如果我们转到tutorial,则说:

  

填写
  当组件的显示区域大于组件的请求大小时使用,以确定是否以及如何调整组件的大小。有效值(定义为GridBagConstraints常量)包括NONE(默认值),HORIZONTAL(使组件足够宽以水平填充其显示区域,但不更改其高度),VERTICAL(使组件足够高以垂直填充其显示区域) ,但不要改变其宽度),和BOTH(使组件完全填满其显示区域)。

因此,它将填充显示区域,与您为columnWeights等指定的内容无关。尝试将其删除或更改为GridBagConstraints.NONE

或按照上述评论中的建议,使用其他layout manager,例如FlowLayout