यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
TextInput
TextInput वह अमूर्त वर्ग है जो TextField (एक पंक्ति) और TextArea (बहुपंक्ति) के बीच साझा संपूर्ण संपादन तर्क को केंद्रित करता है: cursor, चयन, clipboard, फ़ोकस/blink, कीबोर्ड शॉर्टकट, तीरों द्वारा नेविगेशन, ActionSheet के साथ long-touch और वर्चुअल कीबोर्ड के साथ एकीकरण। उपवर्ग स्थानिक मैपिंग (1D बनाम 2D), रोलिंग, रेंडरिंग और मास्क लागू करते हैं।
आप TextInput को सीधे instantiate नहीं करते — आप TextField या TextArea को instantiate करते हैं। यह पृष्ठ उसका सिंहावलोकन है जो दोनों विरासत में लेते हैं। यह UIConstants.TextInputComponent (setText/getText/isPassword/replaceText/keyboardHidden/getCursorPos/hasFocus) लागू करता है।
🟡 · पैकेज:
dev.crossfly.ui· विस्तार करता है:Component· लागू करता है:UIConstants.TextInputComponent· अमूर्त
कब उपयोग करें
- किसी भी प्रविष्टि फ़ील्ड को संदर्भित करते समय साझा प्रकार के रूप में (
TextInput campo = new TextField(...))। - ऐसा कोड लिखते समय जो cursor/चयन/clipboard पर काम करता है बिना यह परवाह किए कि वह 1 पंक्ति है या N।
कब उपयोग न करें
- किसी ठोस फ़ील्ड को instantiate करने के लिए →
TextField(1 पंक्ति) याTextArea(बहुपंक्ति) उपयोग करें।
पदानुक्रम
Component → TextInput (अमूर्त) → TextField / TextArea। constructor buffer की प्रारंभिक क्षमता लेता है: TextInput(int initialCapacity)। यह isPressable() → true है।
आंतरिक अवस्था (मुख्य फ़ील्ड)
| फ़ील्ड | प्रकार | अर्थ |
|---|---|---|
chars |
StringBuffer |
टेक्स्ट का कच्चा buffer |
text |
String |
प्रदर्शित टेक्स्ट (उपवर्ग द्वारा अद्यतन; "" से शुरू) |
insertPos |
int |
cursor की स्थिति (सम्मिलन) |
startSelectPos |
int |
चयन का आरंभ, या चयन न होने पर -1 |
cursorShowing |
boolean |
cursor blink का दृश्य चरण |
keyboardCanOpen |
boolean |
अगले touch-up पर कीबोर्ड खुल सकता है |
hasFocus |
boolean |
कीबोर्ड फ़ोकस है |
caption |
String |
placeholder / फ़्लोटिंग caption |
विरासत में मिली विधियाँ (cursor, चयन, clipboard)
| विधि | रिटर्न | क्या करता है |
|---|---|---|
setText(String) |
void* |
टेक्स्ट सेट करता है (उपवर्ग द्वारा लागू) |
getText() |
String |
वर्तमान टेक्स्ट (TextField में मास्क सहित) |
setCursorPos(int start, int end) |
void |
चयन सेट करता है; यदि start==end, तो केवल cursor चलाता है |
setCursorPos(int pos) |
void |
चयन रहित cursor |
getCursorPos() |
int[] |
[startSelectPos, insertPos] |
getInsertPos() |
int |
cursor की स्थिति |
hasSelection() |
boolean |
कोई चयनित अंतराल है? |
getSelectionStart() / getSelectionEnd() |
int |
स्थितियों का min / max |
getTextBuffer() / getLength() |
StringBuffer / int |
कच्चा buffer / आकार |
clipboardCopy() / clipboardCut() |
void |
चयन कॉपी / कट करता है (Device.clipboard* के माध्यम से) |
clipboardPaste() / clearText() |
void |
अमूर्त — उपवर्ग मास्क/\n संभालता है |
mapKeys(String from, String to) |
void |
वर्ण-दर-वर्ण remapping (आकार भिन्न होने पर IllegalArgumentException फेंकता है; null/null साफ़ करता है) |
hasFocus() |
boolean |
कीबोर्ड फ़ोकस है |
restoreFocusAtEnd() |
void |
फ़ोकस पुनः असाइन करता है और cursor को अंत तक ले जाता है (picker/keypad बंद करने के बाद) |
*setText TextComponent अनुबंध में void लौटाता है; TextField.text(...)/TextArea.text(...) fluent संस्करण प्रदान करते हैं जो स्वयं फ़ील्ड लौटाते हैं।
Callbacks और घटनाएँ
| Callback | कब ट्रिगर होता है |
|---|---|
onAction(Action) (विरासत में) |
onTouchUp में (कीबोर्ड खुलने के बाद) |
onFocus() / onBlur() |
फ़ोकस प्राप्ति / हानि (cursor और blink चालू/बंद करता है) |
कोई समर्पित onChange नहीं है: परिवर्तनों पर प्रतिक्रिया देने के लिए, क्रिया callback के माध्यम से देखें या getText() से पूछें।
अवस्थाएँ
- focused: cursor चालू और झपकता (
cursorShowing), स्पर्श पर कीबोर्ड/Keypadखुलता है;onFocus()/onBlur()संक्रमण नियंत्रित करते हैं। - selection: अंतराल
[startSelectPos, insertPos]; long-touch सब कुछ चुनता है औरActionSheet(Copy/Cut/Paste/Clear) खोलता है। - disabled / read-only: शैली में
setEnabled(false)याeditable=falseसंपादन रोकते हैं।
कुंजियाँ (onKeyDown से विरासत में)
- Ctrl+C / V / X → कॉपी / पेस्ट / कट; Ctrl+A → सब कुछ चुनें।
- Backspace / Delete → चयन या एक वर्ण मिटाता है।
- Left / Right / Home / End → cursor चलाता है; Shift के साथ चयन बढ़ाता है।
पूरा उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// बहुरूपी संदर्भ: TextInput, TextField/TextArea का अमूर्त आधार है
TextInput campo = new TextField("valor inicial");
add(LAY_AUTO, (Component) campo);
// आउटपुट Label
Label saida = new Label("Leia o campo com o botão");
add(LAY_AUTO, saida);
// हर कुंजी पर इवेंट नहीं है: भेजते समय getText() पढ़ें
Button enviar = new Button("Enviar")
.onAction(c -> saida.setText("Você digitou: " + campo.getText()));
add(LAY_AUTO, enviar);
}
}
नीचे के अंश केवल मूल भाग दिखाते हैं (जो
onShow()के अंदर जाता है)। चलाने के लिए, उन्हें ऊपर दिएMainWindowकंकाल में रखें।
उदाहरण (आधार प्रकार का उपयोग)
// ठोस फ़ील्ड का बहुरूपी संदर्भ
TextInput campo = new TextField("valor inicial");
container.add(LAY_AUTO, (Component) campo);
// आधार वर्ग के जरिए सामान्य ऑपरेशन
if (campo.hasSelection())
campo.clipboardCopy();
int[] sel = campo.getCursorPos(); // [start, insert]
campo.setCursorPos(campo.getLength()); // कर्सर अंत में
अच्छे अभ्यास
- जब कोड स्वरूप (1 बनाम N पंक्तियाँ) पर निर्भर न हो, तो
TextInput/UIConstants.TextInputComponentके विरुद्ध प्रोग्राम करें। - किसी picker/
Keypadको बंद करने के बाद, फ़ोकस सही ढंग से लौटाने के लिएrestoreFocusAtEnd()कॉल करें।
सामान्य गलतियाँ
TextInputको instantiate करने का प्रयास: यह अमूर्त है —TextField/TextAreaउपयोग करें।- आधार में
clipboardPaste()/clearText()के काम करने की अपेक्षा: ये अमूर्त हैं; व्यवहार उपवर्ग से आता है (TextFieldमें मास्क,TextAreaमें\n)।