如何禁用的JavaFX文本,使它看起來如何禁用的JavaFX文本
Text t = new Text();
t.setText("This is a text sample");
t.setDisable(true); //it does not work
如何禁用的JavaFX文本,使它看起來如何禁用的JavaFX文本
Text t = new Text();
t.setText("This is a text sample");
t.setDisable(true); //it does not work
解決方案
你可以樣式的文本在視覺上,禁用,如果你想。下面的解決方案將不透明度設置綁定到文本的禁用設置。
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class DisabledText extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Text enabledText = new Text("Enabled");
Text disabledText = new Text("Disabled");
disabledText.opacityProperty().bind(
Bindings.when(
disabledText.disabledProperty())
.then(0.4)
.otherwise(1)
);
disabledText.setDisable(true);
VBox layout = new VBox(10, enabledText, disabledText);
layout.setPadding(new Insets(10));
stage.setScene(new Scene(layout));
stage.show();
}
}
注意
你也許可以通過CSS來實現這一目標還有,而非約束,我只是沒有嘗試的選擇。
一般來說,很多時候,使用Label和Text通常會更好,因爲它包含更多的靈活性和功能。
背景
即使用戶不能用文字直接交互,因此禁用文字真的有沒有影響,我猜你正在尋找的是文本看起來像其他東西的時候,他們被禁止。
通常,當菜單項或按鈕等控件被禁用時,會發生什麼情況:在控件上設置了CSS僞類:disabled
。發生這種情況時,JavaFX 8的默認modena.css樣式表會將控件的不透明度修改爲-fx-opacity: 0.4;
。這會改變控件的外觀,使其看起來好像變灰,因爲低透明度會使控件看起來褪色。
文本被構建爲基本繪圖形狀。 Java中的基本繪圖形狀故意不依賴於CSS(儘管如果需要可以使用CSS) - 有關默認CSS規則適用於形狀的信息,請參見CSS reference guide。如果場景不使用任何佈局窗格或控件,則不會加載標準的modena.css樣式表,並且不會將CSS處理應用於場景(出於效率原因,例如,您可以編寫高性能沒有使用CSS處理的遊戲)。因此,對於文本的CSS處理不一定是必需的,並且如果使用的話,其範圍受到限制。
兩種可能的方式:
我推薦使用Label而不是Text。
它沒有任何意義。文本只是文字,它什麼也不做,你不能與它互動。沒有什麼可禁用的。你期望禁用的文字能做什麼? – jewelsea
什麼都沒有,只是表明禁用x選項的用戶,帶有標籤的作品,只是一個標籤不允許我格式化文本,所以我使用文字 – R3ing
我不確定文本如何提供更多的格式選項標籤,但我會盡力回答你的問題。 – jewelsea