本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
如何使用复选框和单选框(Option 和 Group)
目的。 提供可勾选的选项。一个独立的 Option 作为复选框
(独立的开/关)工作。同一个 Group 中的多个 Option 作为单选
按钮(一次只能选中一个)工作。复选框用于独立选择;单选框
用于在多个备选项之间的唯一选择。
所用 API
new Option()/new Option(String text)— 创建选项(带或不带标签)。初始为未勾选。option.checked(boolean checked)— 设置初始状态,不带动画(流式)。option.setChecked(boolean checked)— 以交叉淡入淡出动画改变状态。option.isChecked()— 返回当前状态(boolean)。option.toggle()— 反转状态(在点击时被内部调用)。option.onAction(Component.Action action)— 当用户点击导致状态改变时触发的回调。new Group()— 互斥选择的分组。option.group(Group g)— 将选项关联到分组(转变为单选框)。group.fade(boolean)— 启用切换选择时的颜色动画过渡。
不易察觉的行为(已在源码中确认):
- 在
Group中,点击已选中的选项不会取消其选中(如果checked && getGroup() != null,toggle()会提前返回)—— 与单选框相同:只有在选择另一项时才切换。onAction只在状态确实改变时触发(if (checked != prev) runActions())。- 在分组的某个选项上通过
checked(true)进行勾选,会立即通知分组并取消其余选项的选中。
完整示例(复制、粘贴即可运行)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
/** 可执行的主界面。将 launcher 指向此类(classname)并运行:gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// ── Checkbox(独立的 Option)──
Option aceito = new Option("Aceito os termos");
aceito.checked(false); // 初始状态,无动画
aceito.onAction(o -> atualizarBotao(aceito.isChecked()));
add(aceito);
// ── Radio(同一 Group 内的多个 Option)──
Group entrega = new Group();
Option padrao = new Option("Entrega padrão").group(entrega);
Option expresso = new Option("Entrega expressa").group(entrega);
padrao.checked(true); // 组的初始选中项
expresso.onAction(o -> escolherFrete("EXPRESSO"));
padrao.onAction(o -> escolherFrete("PADRAO"));
add(padrao);
add(expresso);
}
private void atualizarBotao(boolean aceito)
{
// ... 根据 checkbox 启用/禁用按钮 ...
}
private void escolherFrete(String tipo)
{
// ... 响应运费选择 ...
}
}
下面的片段只展示核心部分。要运行它,请把它放进上面的
MainWindow骨架中。
最小片段
// ── Checkbox(独立的 Option)──
Option aceito = new Option("Aceito os termos");
aceito.checked(false); // 初始状态,无动画
aceito.onAction(o -> atualizarBotao(aceito.isChecked()));
add(aceito);
// ── Radio(同一 Group 内的多个 Option)──
Group entrega = new Group();
Option padrao = new Option("Entrega padrão").group(entrega);
Option expresso = new Option("Entrega expressa").group(entrega);
padrao.checked(true); // 组的初始选中项
expresso.onAction(o -> escolherFrete("EXPRESSO"));
padrao.onAction(o -> escolherFrete("PADRAO"));
add(padrao);
add(expresso);
验证说明(2026 代码)。 已确认:
Option实现了Component.Checkable和AlphaAnimation.Animate;Group.select(sender)会自动取消其余成员 (Option/Switch)的选中。Group.fade(默认false)控制 切换是否带动画。Group中没有「值」:要知道选中项,请检查 每个Option的isChecked(),或在回调中保存所选的引用。
深入了解
- 控件页面:Option · Group
- 下拉框(弹出层中的单选):dropdown-selecao.md
这个页面有帮助吗?感谢你的反馈!