JavaFXアプリケーションでTextField
とそのLabel
を非表示または非アクティブ化したいと思います。
これは私が試したものです
myTextField.setVisible(false);
、しかしそれは機能していません
Jfx8V2.0.0を搭載したWindows7でEclipseV4.5.0を使用しています
JavaFXでTextFieldを非表示にすることと非アクティブ化することには違いがあります。
非表示にするには:- visibleプロパティをfalseに設定する必要があります。
考えられる理由は、TextFieldまたはLabelのfx:idの言及をスキップした場合に、それが機能しない理由です。
これを行うには、fx:id = "myTextField"を使用して設定する場合は、fxmlを確認するだけで、作成したのと同じコードが機能し始めます。
同じことがラベルを非表示にするために使用されます。
非アクティブ化するには:- disableという名前のフィールドがあり、そのdisableプロパティをtrueに設定して、フィールドを無効化または非アクティブ化します。
次のように、.fxml
ファイルのラベルに対してこれを行うこともできます。
<Label layoutX="349.0" layoutY="85.0"
text="Label" visible="false" fx:id="actionSuccessLabel"/>
その後、次のようにControllerクラスに表示します。
actionSuccessLabel.setVisible(true);
私はあなたの質問を正しく理解しているかどうかはわかりませんが、私が理解していることに答えようとします。
TextField
のみを非アクティブ化する場合は、次を使用できます。
myTextField.setEditable(false);
これはTextField
を「隠す」ことはありません。編集できないだけです。
提供されたコードに基づいて、問題は静的に作成された(FXMLで)TextField
にある可能性があります。私が提案するのは、ランタイムでPane
とTextField
を動的に作成することです。ランタイムでJavaFXコンポーネントを作成して使用する方法の簡単な例を次に示します。
public class ButtonInPane extends Application{
// Override the start method in the Application class
Button btn=new Button("OK");
HBox cont;
TextField myTextField;
public void start(Stage stage1){
Label myLable=new Label("Some Lable");
myTextField=new TextField("Some text");
cont=new HBox();
cont.getChildren().addAll(myLable,myTextField);
Stage stage = new Stage(); //this instead of JFrame
FlowPane pane2 = new FlowPane(); //this instead of JPanel
pane2.getChildren().addAll(btn,cont);
Scene scene2 = new Scene(pane2, 250, 50);
stage.setTitle("Button in a FlowPane"); // Set the stage title
stage.setScene(scene2); // Place the scene in the stage
stage.show(); // Display the stage
stage.setAlwaysOnTop(true);
//set event
setEventActions();
}
private void handlePlayAction() {
cont.setVisible(false);
//OR myTextField.setVisible(false);
}
private void setEventActions() {
this.btn.setOnAction(event -> this.handlePlayAction());
}
public static void main(String[] args)
{ launch(args);
}
}
テキストフィールド(javaFX)を非表示/表示したいことを理解しました。通常、テキストフィールドの変数名がfieldであると仮定して、前述したのと同じ方法を使用します。
それを隠すには
field.setVisible(false);
それを使用することを示すために
field.setVisible(true);
そしてそれは私のために常に働きます。
次を使用できます。
myTextField.setDisable(true);
特定のアクションのフィールドを無効にします。
setVisibleまたは可視プロパティバインディングafter新しい関数を実行することを忘れないでください。
TextField textField = new TextField(field.getValue());
textField.visibleProperty().bind(field.getVisibleProperty());