0

複数の列を持つtreetableviewがあります。1列だけ注文したいので、適用します:

treetbvItems.getSortOrder().add("categoria");

この注文データは列「カテゴリ」のアルファベット順ですが、カスタム注文を適用したいと思います。

たとえば、カテゴリが次の値のいずれかである場合: 動物、コンピューター、靴、乗り物... 上記の文では、次の方法でツリーの順序を取得します。

  1. 動物
  2. コンピュータ

しかし、私が望むなら(他のカスタムオーダーでもかまいません):

  1. コンピュータ
  2. 動物

JavaFXでできること、できないことはありますか?

4

1 に答える 1

0

私はあなたが本当に意味していると思います

TreeTableColumn<String> categoria ; 
// ...

treebvItems.getSortOrder().add(categoria);

投稿したコードはコンパイルされないためです。

column にa を設定するComparatorことにより、特定の列の順序を制御できます

は、最初の引数が 2 番目の引数の前にある場合は負を返し、 2 番目の引数が最初の引数の前にある場合は正の値を返し、それらが等しい場合は 0を返すメソッドをComparator定義します。compareTo(String, String)intint

したがって、次のようなことができます。

categoria.setComparator((cat1, cat2) -> {
    if (cat1.equals(cat2)) {
        return 0 ;
    }
    if ("computers".equals(cat1)) {
        return -1 ;
    }
    if ("computers".equals(cat2)) {
        return 1 ;
    }
    if ("shoes".equals(cat1)) {
        return -1 ;
    }
    if ("shoes".equals(cat2)) {
        return 1 ;
    }
    if ("animals".equals(cat1)) {
        return -1 ;
    }
    if ("animals".equals(cat2)) {
       return 1 ;
    }
    throw new IllegalArgumentException("Unknown categories: "+cat1+", "+cat2);
}

カテゴリの固定セットがある場合は、おそらく のEnum代わりに を使用する必要があることに注意してくださいString。の「自然な」順序は、Enumその宣言順序によって定義されます。

于 2014-11-11T15:19:54.727 に答える