如何使JToggleButton的大小在Selected和Not Selected状态下固定并相等?

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

未选择尺寸:

java - 如何在选择和取消选择时使JToggleButton-size固定?-LMLPHP

和选择的大小

java - 如何在选择和取消选择时使JToggleButton-size固定?-LMLPHP

我尝试了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是我们正在谈论的按钮。

最佳答案

一种方法是设置preferredSize中的JToggleButton,但更重要的是,如何使用GroupLayout将按钮添加到基础容器中。 GroupLayout可能会或可能不会在意preferredSize属性。

参考this,您可以使用GroupLayout的规则,如下所述:


  GroupLayout定义了可以精确控制调整大小行为的常量。它们可以在addComponent(Component comp,int min,int pref,int max)方法中用作参数。这是两个示例:
  
  
  强制调整组件大小(允许缩小和增长):
  


    group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ...



  这允许组件将大小调整为零(最小)到任意大小(Short.MAX_VALUE,因为最大大小表示“无穷大”)。如果我们希望组件不缩小到其默认最小大小以下,我们将使用GroupLayout.DEFAULT_SIZE而不是第二个参数中的0。
  
  
  要使组件固定大小(禁止调整大小):
  


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



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


因此,在您的代码中,您拥有:

.addComponent(connectionTglBtn, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE))


您应该根据规则2对其进行更改,以将connectionTglBtn强制设置为固定大小。

希望这会有所帮助。

10-07 16:33