RFR: 8092102: Labeled: truncated property [v11]
Kevin Rushforth
kcr at openjdk.org
Fri May 3 13:31:58 UTC 2024
On Thu, 2 May 2024 22:10:24 GMT, Andy Goryachev <angorya at openjdk.org> wrote:
>> Adds **Labeled.textTruncated** property which indicates when the text is visually truncated (and the ellipsis string is inserted) in order to fit the available width.
>>
>> The new property reacts to changes in the following properties:
>> - ellipsisString
>> - font
>> - height
>> - text
>> - width
>> - wrapText
>>
>> I don't think it's worth creating a headful test (headless won't work) due to relative simplicity of the code.
>>
>> **Alternative**
>>
>> The desired functionality can be just as easily achieved on an application level, by adding a similar property to a subclass. What is the benefit of adding this functionality to the core?
>>
>> UPDATE 2024/03/07: turns out Labeled in a TableView (in a TreeTableView as well) lives by different rules (TableCellSkinBase:152, TreeTableCellSkin:126). The consequence of this is that the new functionality **cannot** be fully implemented with the public APIs alone.
>>
>> **See Also**
>>
>> * [JDK-8327483](https://bugs.openjdk.org/browse/JDK-8327483) TreeView: Allow for tooltip when cell text is truncated
>> * [JDK-8205211](https://bugs.openjdk.org/browse/JDK-8205211) Ability to show Tooltip only when text is shown with ellipsis (...)
>
> Andy Goryachev has updated the pull request incrementally with one additional commit since the last revision:
>
> using properties
Here is a test showing the failure to detect truncated text.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.stage.Stage;
public class TruncatedTest extends Application {
private static final String clickMe = "Click me";
private static final String clickMeAgain = "Click me again, please";
@Override public void start(Stage stage) {
stage.setTitle("Truncated Button Text (fails)");
var root = new HBox(10);
Scene scene = new Scene(root, 600, 450);
var button = new Button(clickMe);
button.setPrefWidth(100);
button.setOnAction(e -> {
button.setText(clickMe.equals(button.getText()) ? clickMeAgain : clickMe);
//System.err.println("truncated: " + button.isTextTruncated());
});
root.getChildren().add(button);
var label = new Label();
label.textProperty().bind(button.textTruncatedProperty().asString());
root.getChildren().add(label);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1389#issuecomment-2093024810
More information about the openjfx-dev
mailing list