【问题标题】:How to make JToggleButton-size fixed upon selection and deselection?如何在选择和取消选择时固定 JToggleButton-size?
【发布时间】:2016-05-14 06:21:45
【问题描述】:

如何使 SelectedNot Selected 状态的 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())
);

在上面的 sn-p 中,connectionTglBtn 就是我们所说的按钮。

【问题讨论】:

  • 你使用的布局管理器是什么?
  • @STaefi 如何检测我正在使用的布局管理器?我使用 Netbeans 工具使用 Drog&Drop 创建表单。
  • 搜索 setLayout 方法在您的代码中调用的位置。可能是您正在使用null 布局。
  • 我发现:javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 所以这意味着我正在使用GroupLayout?
  • 您使用GroupLayout 是正确的。组件的大小很大程度上取决于您使用的布局管理器。每个布局管理器都关心组件的子集或所有属性。例如,他们中的一些人关心size,而其他许多人关心'preferredSize'。

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


【解决方案1】:

一种方法是设置preferredSizeJToggleButton,但更重要的是如何使用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))

您应该根据规则 2 对其进行更改,以强制您的 connectionTglBtn固定大小

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多