2016-07-17 5 views
2

JavaFX 8用のカスタムカラーピッカーコントロールを作成しました。これは、GridPaneの6個のSliderと、その上にそれぞれLabelsがあります。私はピッカー、ラベルテキストのオーバーフローを絞り込む今ラベルのカスタムオーバーランスタイルの定義

<GridPane vgap="10" hgap="10"> 
    <Label labelFor="${redSlider}" text="Red" 
      GridPane.rowIndex="0" GridPane.columnIndex="0" GridPane.halignment="CENTER"/> 
    <!-- 5 more labels --> 
    <Slider max="255" orientation="VERTICAL" fx:id="redSlider" id="redSlider" 
      GridPane.rowIndex="1" GridPane.columnIndex="0" GridPane.vgrow="ALWAYS" 
      GridPane.hgrow="ALWAYS" GridPane.halignment="CENTER"/> 
    <!-- 5 more Sliders --> 
</GridPane> 

color picker

、。私はここに起こるしたいのですがどのような

narrowed color picker

は、テキストが彼らの最初の文字RGBHSLの代わりに、楕円形でクリッピングされたバージョンに変更するだろうということです。

LabeltextOverrunプロパティはOverrunStyleで定義された7つの値にオーバーフローモードを設定することができますが、それらのどれも私が探しているものと一致しません。

Labelクラス内を見ると、表示されるテキストはSkinで計算されます。私のJDKでは、これはcom.sun.javafx.scene.control.skin.LabeledSkinBase.updateDisplayedText()に直進し、com.sun.javafx.scene.control.skin.Utils.computeClippedText()を呼び出します。 Labelを移植することができないので、このようなものを修正するのは簡単な方法ではありません。基本的にLabelのUIの完全実装であるSkin全体を再実装する必要があります。

独自のSkinを実装するよりも、他のあふれたときに、単一の文字にLabel s'はテキストの契約をするポータブル方法はありますか?

更新:私は@VGRanswerを再利用可能なクラスとして実装しました。あなたはここでそれを得ることができます。このことができます(ただし、それはいくつかの改善が必要である)https://bitbucket.org/snippets/Pietu1998/LEqXo

答えて

2

これはあなたのために、使用して達成するためにOverrunStyle尋ねた目標を、それが作成し、非常にものではありません同じ効果:

public static Node createCondensingLabel(String regularText, 
             String condensedText) { 

    Label regularLabel = new Label(regularText); 
    Label condensedLabel = new Label(condensedText); 

    StackPane pane = new StackPane(regularLabel, condensedLabel); 

    BooleanBinding fullyVisible = Bindings.createBooleanBinding(() -> 
     regularLabel.getWidth() >= 
      regularLabel.prefWidth(regularLabel.getHeight()), 
     regularLabel.widthProperty()); 

    regularLabel.visibleProperty().bind(fullyVisible); 
    condensedLabel.visibleProperty().bind(fullyVisible.not()); 

    return pane; 
} 
+0

ありがとうございます。私は再利用可能なクラスとして書き直しました。 MITライセンスのスニペットとしてあなたに帰属させて結果を公開してもらえますか? – Pietu1998

+0

@ Pietu1998私はまったく気にしません。 – VGR

+0

[結果は次のとおりです。](移植のための) – Pietu1998

1

希望

import javafx.application.Platform; 
import javafx.scene.Node; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.SkinBase; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.StackPane; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 

public class Test extends javafx.application.Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("Test"); 

     HBox root = new HBox(); 

     root.getChildren().add(getLabel("Aaaaa")); 
     root.getChildren().add(getLabel("Bbbbbbbbb")); 
     root.getChildren().add(getLabel("Cccccccccccccccccc")); 
     root.getChildren().add(getLabel("Ddddddddddddd")); 
     root.getChildren().add(getLabel("Eeeeeeeeee")); 
     root.getChildren().add(getLabel("Fffff")); 

     primaryStage.setScene(new Scene(root, 500, 250)); 
     primaryStage.show(); 
    } 

    private StackPane getLabel(String text) { 

     final Label label = new Label(text); 
     final Label gLabel = new Label(text.substring(0, 1)); 

     // should run after label become visible 
     Platform.runLater(() -> { 
      for(Node node : ((SkinBase<Label>)label.getSkin()).getChildren()) { 
       if(node instanceof Text) { 
        ((Text)node).textProperty().addListener((e, o, n) -> { 
         gLabel.setVisible(!label.getText().equals(n)); 
         label.setVisible(!gLabel.isVisible()); 
        }); 
       } 
      } 
     }); 

     gLabel.setStyle("-fx-border-color: red"); 
     gLabel.setVisible(false); 

     StackPane pane = new StackPane(label, gLabel); 

     return pane; 

    } 

} 
+0

これは_my_ JDKでは機能しますが、移植性がありません。私はポータブルなソリューションを探しています。 – Pietu1998

+0

このコードは、どのように、あるいはどの部分で移植できないのですか? – guleryuz

+0

文書化されていない 'com.sun'パッケージの使用。 https://stackoverflow.com/questions/8565708/what-is-inside-com-sun-package – Pietu1998

関連する問題