跳到内容
CrossFly 是 100% 开源在 GitHub 关注我们
CrossFlyCrossFly
开始使用

本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。

HorizontalLayout

将子组件并排排列(每个子组件一列),从左到右。它是 VerticalLayout 的水平对应版本——非常适合工具栏和控件行。

🟢 · 包: dev.crossfly.ui.layout · 继承自: Layout

何时使用

  • 搜索栏/操作栏:[ícone] [campo que estica] [botão]。
  • 任何控件行。

何时不要使用

add(...) — 签名与语义

public HorizontalLayout add(float largura, Component c)
值 含义
LAY_AUTO(0f) 组件的自然宽度
LAY_FILL(-1f) 填满剩余空间(只用一个 FILL 列)
> 0(例如 0.5f) 容器宽度的分数

构造函数

构造函数 说明
new HorizontalLayout() 各项垂直居中
new HorizontalLayout(Position h, Position v) v = 每一列的垂直对齐方式

完整示例(复制、粘贴并运行)

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(Position.START, Position.START));

      Component barra = new Component();
      barra.setLayout(new HorizontalLayout(Position.START, Position.CENTER));
      barra.add(LAY_AUTO, new Label("🔎"));               // 自然宽度
      barra.add(LAY_FILL, new TextField("Buscar..."));     // 拉伸
      barra.add(LAY_AUTO, new Button("OK"));               // 自然宽度

      add(LAY_AUTO, barra);                    // 该栏占据顶部一行
      add(LAY_FILL, new Component());          // 屏幕其余部分(占位符)
   }
}

下面的片段只展示核心部分(放进 onShow() 里的内容)。要运行它们,请将其放入上面的 MainWindow 骨架中。

基本用法

Component barra = new Component();
barra.setLayout(new HorizontalLayout(Position.START, Position.CENTER));
barra.add(LAY_AUTO, new ImageView(/* 图标 */));   // 自然宽度
barra.add(LAY_FILL, new TextField("Buscar..."));    // 拉伸
barra.add(LAY_AUTO, new Button("OK"));              // 自然宽度

排布方式

┌────────┬───────────────────────────┬────────┐
│ ícone  │ campo (LAY_FILL, estica)   │ botão  │
│ (auto) │                           │ (auto) │
└────────┴───────────────────────────┴────────┘

最佳实践

  • 每行1 个 LAY_FILL 元素(即应当拉伸的那个)。
  • 两个“弹性”元素并保持固定比例 → 使用分数(0.5f/0.5f)或 GridLayout。

常见错误

  • 同一行中出现两个 LAY_FILL。
  • 使用像素(add(120, x))而非分数/自动——会破坏响应式。

另请参阅

这个页面有帮助吗?