1

如何使选定未选定状态的 JToggleButton 的大小固定且相等?

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

未选择尺寸:

在此处输入图像描述

选定的尺寸

在此处输入图像描述

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

4

1 回答 1

3

一种方法是设置preferredSize您的JToggleButton,但更重要的是如何使用GroupLayout. GroupLayout可能会或可能不会关心preferredSize财产。

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

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

  1. 强制组件可调整大小(允许缩小和增长):
    group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ...

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

  1. 使组件固定大小(抑制调整大小):
    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))

您应该根据规则 2connectionTglBtn更改它以强制您固定大小

希望这会有所帮助。

于 2016-05-14T07:23:36.167 回答