如何在选择和取消选择时修复JToggleButton大小?

时间:2016-05-14 06:21:45

标签: java swing look-and-feel grouplayout jtogglebutton

如何使 Selected Not Selected 状态的JToggleButton大小固定且相等?

如下所示,我现在有一个可变长度按钮:

未选中尺寸:

enter image description here

已选择尺寸

enter image description here

我尝试了setSize()setPreferedSize()方法,但没有任何改变。

当前按钮方法:

private void connectionTglBtnActionPerformed(java.awt.event.ActionEvent evt) {                                                 

        if (connectionTglBtn.isSelected()) {
            connectionTglBtn.setText("S");
        } else {
            connectionTglBtn.setText("SSSS");
        }
}

更新

这里有我的布局管理器初始化方法:

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addComponent(readersComBox, javax.swing.GroupLayout.PREFERRED_SIZE, 338, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(refreshBtn)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(connectionTglBtn, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addComponent(jButton1)
                .addGap(0, 0, Short.MAX_VALUE)))
        .addContainerGap())
);
layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
            .addComponent(readersComBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(refreshBtn)
            .addComponent(connectionTglBtn))
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
        .addComponent(jLabel1)
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
        .addComponent(jButton1)
        .addContainerGap())
);

在上面的代码段中,connectionTglBtn是我们正在讨论的按钮。

1 个答案:

答案 0 :(得分:3)

一种方法是设置preferredSize的{​​{1}},但更重要的是使用JToggleButton将按钮添加到基础容器的方式。 GroupLayout可能会也可能不关心GroupLayout财产。

参考this,您可以按照preferredSize的规则使用

  

GroupLayout定义了可以精确控制调整大小行为的常量。它们可以用作addComponent(Component comp,int min,int pref,int max)方法中的参数。以下是两个例子:

     
      
  1. 强制组件可调整大小(允许收缩和增长):
  2.   
GroupLayout
  

这允许组件在零大小(最小)到任何大小之间调整大小(Short.MAX_VALUE,因为最大大小意味着“无限”)。如果我们希望组件不缩小到其默认最小大小以下,我们将在第二个参数中使用GroupLayout.DEFAULT_SIZE而不是0。

     
      
  1. 要使组件固定大小(禁止调整大小):
  2.   
    group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ...
  

在这些示例中,组件的初始大小不会更改,其默认大小是组件的首选大小。如果我们想要组件的特定大小,我们将在第二个参数中指定它而不是使用GroupLayout.DEFAULT_SIZE。

所以在您的代码中:

    group.addComponent(component, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
      GroupLayout.PREFERRED_SIZE) ...

您应该根据规则2 进行更改,以强制.addComponent(connectionTglBtn, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE)) 固定尺寸​​

希望这会有所帮助。