2012-10-05 12 views
11

मैं जावाएफएक्स 2.1 का उपयोग करता हूं और मैंने इस जीयूआई के नियंत्रक में FXML का उपयोग करके जीयूआई बनाया है, मैंने myTextField.requestFocus(); जोड़ा।टेक्स्टफिल्ड में RequestFocus काम नहीं करता

लेकिन मुझे हमेशा दूसरे नियंत्रण में ध्यान मिलता है।

उत्तर

37

initialize() के समय नियंत्रण अभी तक ध्यान केंद्रित करने के लिए तैयार नहीं हैं।

आप अगले चाल की कोशिश कर सकते हैं:

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 
      tf.requestFocus(); 
     } 
    }); 
} 

मुश्किल जटिल अनुप्रयोगों के लिए (Pavel_k की तरह टिप्पणी में है) आप इस दिनचर्या में कई बार और कॉल विधि लाइन को दोहराने के लिए चाहते हो सकता है अगले एक:

private void repeatFocus(Node node) { 
    Platform.runLater(() -> { 
     if (!node.isFocused()) { 
      node.requestFocus(); 
      repeatFocus(node); 
     } 
    }); 
} 

ध्यान दें कि यह अनियंत्रित दृष्टिकोण है और भविष्य में जावा रिलीज़ में कुछ बदल गया या तोड़ने पर अंतहीन पाश से बचने के लिए पुनरावृत्ति के लिए सीमा जोड़ना बुद्धिमान हो सकता है। एक पूरे ऐप से बेहतर ध्यान केंद्रित करें। :)

+0

यह मेरे लिए काम करता है, धन्यवाद! – Adil

+0

मुझे कुछ हद तक संबंधित समस्या थी, मेरे 'टेक्स्टअरे' ने प्रोग्राम को फोकस करने से इंकार कर दिया, भले ही चरण दृश्यमान और सक्रिय था ** और ** वर्तमान चलने वाला धागा जावाएफएक्स एप्लीकेशन थ्रेड था। लेकिन अगर मैंने उदाहरण का पालन किया और एक नया 'रननेबल' कतार लगाया तो यह काम करता था। वास्तव में अजीब, मेरे पास इसके लिए कोई शब्द नहीं है। –

+0

यह अब जावाएफएक्स 8 के साथ काम नहीं कर रहा है। 'Tf == null' अभी भी' प्रारंभिक 'रनों के समय सच है। – skiwi

7

यदि आप अनुरोध करते हैं फोकस(); दृश्य शुरू करने के बाद, यह काम करेगा!

इस तरह

:

Stage stage = new Stage(); 
GridPane grid = new GridPane(); 
//... add buttons&stuff to pane 

Scene scene = new Scene(grid, 800, 600); 

TEXTFIELD.requestFocus(); 

stage.setScene(scene); 
stage.show(); 

मुझे आशा है कि इस मदद करता है। :)

5

@ सेर्गी Grinev के समान सटीक उत्तर। सुनिश्चित करें कि जावा का आपका संस्करण अद्यतित है (जेडीके 1.8 या बाद में)।

Platform.runLater(()->myTextField.requestFocus()); 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^