2014-10-01 75 views
0

我有文本框包含一個值,該值應該是右對齊。TextField右對齊問題javafx

當我運行該應用程序時,它顯示文本左對齊,但我設置了正確的對齊方式。 和第三個文本框的問題。

點擊更新按鈕後,它工作正常。

所以我可以知道它爲什麼表現不同。

代碼:

import java.io.File; 

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.VBox; 
import javafx.stage.FileChooser; 
import javafx.stage.Stage; 

public class TextFieldAlignment extends Application { 

    TextField rText; 

    File file; 

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

    @Override 
    public void start(Stage stage) { 
     rText = new TextField("updated right1 updated right2 updated right3 updated right4"); 
     rText.setAlignment(Pos.CENTER_RIGHT); 

     Button btn = new Button("update"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent t) { 
       rText.setText("updated right1 updated right2 updated right3 updated right4"); 

//    applyWorkaround(); 
      } 
     });  

     final Label labelFile = new Label(); 

      Button btn2 = new Button(); 
      btn2.setText("Open FileChooser'"); 
      btn2.setOnAction(new EventHandler<ActionEvent>() { 

       @Override 
       public void handle(ActionEvent event) { 
        FileChooser fileChooser = new FileChooser(); 

        //Set extension filter 
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("AVI files (*.exml)", "*.exml"); 
        fileChooser.getExtensionFilters().add(extFilter); 

        //Show open file dialog 
        file = fileChooser.showOpenDialog(null); 

//    rText.setText(file.getPath()); 
       } 
      }); 

     VBox root = new VBox(); 
     root.getChildren().addAll(rText, btn, btn2); 

     stage.setScene(new Scene(root, 200, 300)); 
     stage.show(); 
    } 

} 
+0

你能詳細說明它在做什麼,你不指望?當我運行這個時,無論如何都會有更多的文本顯示在文本框中。所以文本字段是「完整的」,沒有額外的對齊空間。如果我在運行應用程序時立即更改窗口的大小,則文本將右對齊。同樣,如果更改代碼以使文本字段被初始化爲一個短字符串,則它顯示爲右對齊。 – 2014-10-01 12:09:20

+0

感謝您的回覆。當我運行應用程序時,第一次顯示來自左對齊的文本,但我稱setAlignment(Pos.Center_Right)和預期的結果是文本字段顯示文本(右對齊),但點擊更新按鈕時它工作正常,它顯示從右側的文本框中的文本。 ?所以我的問題,如果我設置右對齊,那麼它應該顯示在第一次嘗試的權利。爲什麼點擊按鈕時它會在正確的信息中顯示文字? – user3337109 2014-10-06 07:23:54

+0

我想你可能會誤解「對齊」的含義。對齊方式告訴文本字段在文本字段中的空間多於文本佔據的位置時如何定位文本。在你的例子中,沒有額外的空間,所以對齊不做任何事情。將初始文本更改爲「x」,您應該看到對齊生效。 (在我的系統中,當我點擊「更新」時沒有任何變化,不知道你的意思。) – 2014-10-06 10:49:54

回答

0

把參考setAlignment和你的setText添加到文本字段後的場景。

價:用於節點的Java API文檔

Node對象可以被構造和修改在任何線程,只要 他們還沒有連接到場景。應用程序必須將節點 附加到場景,並修改已附加到場景的節點,該節點位於JavaFX應用程序線程的 上。

+0

但是,如果我使用場景構建器創建UI,那麼如何執行此功能。 – user3337109 2014-10-01 09:41:49

+0

如果使用場景構建器創建UI(場景構建器提供了對齊屬性,但它不適用於我,則問題是如何修改爲Scene對象以添加setAlignment和setText方法功能。 – user3337109 2014-10-01 09:59:48