2017-01-19 3 views
0

私はテーブルビューを持っていて、1つの列に私はの文字列の各文字をに割り当てることができますようにしたいと思います。どうやら、textFillは文字列で文字列を最初に分割しようとしたため、セル全体でしか機能しません。私が望むようにがあまりではないコードを含んでいますが、それは表示されています(最初の文字だけに基づいてセルのテキストの色が変わります)。そのセルで多色の出力を得るにはどのように調整できますか? [注:Unicode文字は、上下の矢印あり]TableView TableCellで各文字を色分けする方法

val colTick = new TableColumn[Quote, String] { 
     editable = false 
     text = "Tick" 
     prefWidth = 90 
     alignmentInParent = scalafx.geometry.Pos.Center 
     cellFactory = { _ => 
     new TableCell[Quote, String] { 
      item.onChange { (_, _oldTick, newTick) => 
      if (newTick == null) { 
       text = null 
       graphic = null 
      } else { 
       if (newTick(0) == '\u2B06') { 
       textFill = Color.Green 
       } else { 
       if (newTick(0) == '\u2B07') textFill = Color.Red else textFill = Color.Black 
       } 
       text = newTick 
      } 
      } 
     } 
     } 
     cellValueFactory = { 
     _.value.tick 
     } 
    } 

答えて

0

@Jarekによって与えられた発言から始まって、このコードは、現在動作しているようです:

 cellFactory = { _ => 
     new TableCell[Quote, String] { 
      item.onChange { (_, _oldTick, newTick) => 
      if (newTick == null) { 
       text = null 
       graphic = null 
      } else { 
       val texts = newTick.map { c => 
       val color: Color = c match { 
        case '⬇' => Color.Red 
        case '⬆' => Color.Green 
        case '_' => Color.Crimson 
        case '○' => Color.DarkBlue 
        case _ =>Color.Black 
       } 
       new Text { 
        setText(c.toString) 
        setFill(color) 
       } 

       } 
       graphic = new javafx.scene.layout.HBox(texts: _*) 
      } 
      } 
     } 
     } 
1

一つは、オプションでは、個別にその色を設定することができますので、文字ごとに別々のTextを使用することです。そして、、TextFlowなどにあるTextを組み合わせてください。

cellFactory = { _ => 
    new javafx.scene.control.TableCell[Quote, String] { 
    override def updateItem(item: String, empty: Boolean): Unit = { 
     super.updateItem(item, empty) 
     setText(null) 
     if (item == null || empty) { 
     setGraphic(null) 
     } else { 
     val texts = item.map { c => 
      val color: Color = c.toLower match { 
      case 'r' => Color.Red 
      case 'g' => Color.Green 
      case 'b' => Color.Blue 
      case _ => Color.Black 
      } 
      new Text { 
      text = c.toString 
      fill = color 
      } 
     } 
     setGraphic(new HBox(texts: _*)) 
     } 
    } 
    } 
} 
+0

ここで文字rg、およびbは色、黒で他の文字になりますが、一例であり、私を正しい方向に向けてくれてありがとう。ただし、オーバーライドは拒否されました。しかし重要なことは、テキストタイプとHboxでした。私は比較のために作業断片を掲載しました。 – TrustNoOne

関連する問題