Saltar al contenido
CrossFly es 100% open sourceSíguenos en GitHub
CrossFlyCrossFly
Empezar
Todos los ejemplos
RecetasListas65 líneas · 1 archivos

Reordering a list

The first row has no up arrow and the last has no down arrow — hidden, not removed, so the column does not jitter as rows move.

Qué muestra esto

A list whose order is the data: move rows, drop rows, read the order back.

Ejecutarlo en tu máquina

Cada ejemplo es una Window normal, así que el lanzador solo necesita su nombre.

gradlew lwjgl3:run --args="classname dev.cf.recipe.R08Reorder"
Editarlo

Java se compila antes de ejecutarse, así que el navegador no puede reconstruir una edición por su cuenta: el código que ves aquí se convirtió en JavaScript con TeaVM antes de publicarse. Copia el archivo a un proyecto y funciona sin cambios en las cuatro plataformas; el comando de arriba es toda la preparación.

Ejecutándose aquíCrossFly 0.1.32
Iniciando la aplicación…

Compilado a JavaScript por TeaVM: es el mismo código, no un vídeo de él. · Todos los ejemplos

Qué usa

Tipos del framework que toca este ejemplo. Los enlazados tienen página de referencia.

ComponentGridLayoutLabelReorderableListScreenStylesUtilsWidgets

El código

Completo, sin recortes. Es el archivo, no un fragmento.

Crudo
dev/cf/recipe/R08Reorder.java
package dev.cf.recipe;

import dev.cf.Tones;

import dev.crossfly.ui.*;
import dev.crossfly.ui.color.*;
import dev.crossfly.ui.graphics.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*;
import java.util.*;

import static dev.crossfly.ui.Widgets.*;

/**
 * A list whose order is the data: move rows, drop rows, read the order back.
 */
public class R08Reorder extends Recipe
{
   private ReorderableList lista;
   private Label ordem;

   public String title()
   {
      return "Reordering a list";
   }

   public String note()
   {
      return "The first row has no up arrow and the last has no down arrow — hidden, not removed,"
         + " so the column does not jitter as rows move.";
   }

   public void build(Component body) throws Exception
   {
      ordem = label("", 1.1f, true, Tones.accent(), Position.START);
      ordem.testTag("recipe.order");

      lista = new ReorderableList()
         .items(new ArrayList<>(Arrays.asList("Name", "City", "Phone", "E-mail")))
         .renderer((i, key) ->
         {
            Component linha = new Component();
            linha.setLayout(new GridLayout(Position.START, Position.CENTER));
            linha.add(LAY_AUTO, LAY_AUTO, Tones.tile(key.substring(0, 1), Tones.cycle(i)),
               outgap(label(key, 1.2f, true, Styles.textColor, Position.START), .6f, 0, 0, 0));
            return linha;
         })
         // Fires AFTER the list is consistent, so it is safe to save straight from here.
         .onChange(this::mostrar);
      lista.testTag("recipe.list");

      body.add(LAY_AUTO, lista);
      body.add(LAY_AUTO, outgap(ordem, 0, 1f, 0, 0));
      mostrar();
   }

   private void mostrar()
   {
      ordem.setText(lista.items()
         .isEmpty() ? "(empty)" : dev.crossfly.util.Utils.join(" > ", lista.items()));
      ordem.setValidLayout(false);
      Screen.repaint();
   }
}
Para una IA

Versiones de esta página legibles por máquina, para que un modelo lea el estante en vez de adivinar la API.

Este ejemplo, en JSONEste ejemplo, en Markdown
AnteriorPicking a date rangeSiguienteMaking a screen testable