2009-09-28 10 views
5

में ऑन-द-फ्लाई टेक्स्ट स्टाइल को कार्यान्वित करना मेरे पास जावा में एक नोट लेने वाला ऐप लिखने का विचार है जो आपके द्वारा टाइप किए जाने पर कुछ सरल टेक्स्ट प्रतिस्थापन करता है; शायद मार्कडाउन वाक्यविन्यास का एक छोटा सबसेट। तो उदाहरण के लिए, यदि आप एक लाइन है कि #sometext था दर्ज की गई है, यह प्रदान की गई हो जाएगा:जेडडिटरपेन

sometext

Wikidpad मुझे क्या करना है (मैं नहीं सिर्फ इतना है कि फिर से लागू करने कर रहा हूँ कोशिश कर रहा हूँ का हिस्सा है, वाक्यविन्यास/प्रदर्शन कार्यक्षमता के कुछ हिस्सों)।

तो अनिवार्य रूप से मैं किसी प्रकार का घटक लिखने का एक तरीका ढूंढ रहा हूं, जब उपयोगकर्ता "वापसी" पर हिट करता है, तो यह दर्ज की गई रेखा को देखेगा और HTML टैग प्राप्त करने के लिए इसे करने के लिए आवश्यक कोई भी जादू करेगा सही।

मैं दस्तावेज़ और दस्तावेज़ फ़िल्टर और दस्तावेज़ लिस्टनर और HTMLReaders के खिलाफ अपना सिर मार रहा हूं और बिना किसी किस्मत के, क्या कोई मुझे सही रास्ते पर रख सकता है?

उत्तर

3

आप जो रुचि रखते हैं वह java text editor kit है। यह ट्यूटोरियल बहुत अच्छा था और मुझे विकी-एडिटर को लागू करने में मदद मिली जो आपकी समस्या के समान लगता है। स्विंग संपादक किट (मान लीजिए या नहीं) विशेष रूप से आपकी समस्या को संभालने के लिए डिज़ाइन किया गया है। मैंने इस तकनीक का उपयोग करके लिंकिंग सिस्टम की तरह गतिशील विकी लिखी है, यद्यपि बहुत सारे संघर्ष किए बिना।यहाँ मैं करना पड़ा है:

  1. एक दस्तावेज़ पहला काम एक दस्तावेज मॉडल है कि पैटर्न टैग कर देता है जब यह पाठ की पहचान करता है बनाने के लिए है सुनिश्चित करें। यदि आप लिंक किए गए उदाहरण में JavaDocument देखते हैं तो एक insertUpdate कॉल है। दस्तावेज़ में आप जिस पैटर्न को ढूंढ रहे हैं उसे ढूंढ सकते हैं और इसे एक कस्टम शैली के साथ बदल सकते हैं। अनिवार्य रूप से आप केवल एक शैली बनाते हैं और इसे उस दस्तावेज़ पर लागू करते हैं जहां पैटर्न मिलान होता है। अद्यतन विधि का एक विकल्प यह है कि यह समय-समय पर नई विकी सामग्री के लिए स्कैन करने के लिए एक निजी कार्यकर्ता थ्रेड का उपयोग करें।

  2. एक प्रतिपादन संदर्भ बनाएं अपने मॉडल को पूरा करने के बाद आप एक संदर्भ लागू कर सकते हैं जो आपके नए पाठ को प्रस्तुत करने के लिए उचित दृश्य बनाता है। लिंक किए गए उदाहरण में वे स्टाइलकॉन्टेक्स्ट का विस्तार करते हैं। टेक्स्ट को दृश्य में प्रस्तुत करने के लिए इसका उपयोग किया जाता है। यहां आप प्रतिपादन नियम सेट कर सकते हैं जो आपके विशिष्ट टैग को पायेंगे और ऐसा कुछ करें जैसे इसे रेखांकित करें और स्क्वायर ब्रैकेट को हटा दें।

  3. एक संपादक किट बनाएं यह सब कुछ एक साथ सिलाई करेगा और आपके दस्तावेज़ के लिए सामग्री प्रकार की पहचान करेगा।

दस्तावेज़ और दृश्य अलग संदर्भों के रूप में रखने के बारे में अच्छी बात आप दो दृश्य, सादे पाठ में से एक है, अपने नए कस्टम संदर्भ में दूसरे के लिए दस्तावेज़ संलग्न कर सकते हैं है। चूंकि डिफ़ॉल्ट शैली आपके टैग को पहचान नहीं पाती है, इसलिए इसे कच्चे विकी कोड फ़ॉर्म में प्रदर्शित करना चाहिए। नया दृश्य दृश्य को उचित लिंकिंग में बदल देगा।

मुझे उम्मीद है कि इससे मदद मिलती है। सावधानी के एक शब्द, यह सामान दुर्भाग्य से जटिल है, स्विंग के लिए भी। सौभाग्य!

+0

हां, यही वह जगह है जहां मेरा नेतृत्व किया गया - लेकिन मैं अभी तक उस ट्यूटोरियल में नहीं चला था। यह निराशाजनक रूप से जटिल रहा है, लेकिन मुझे लगता है कि पृष्ठ बहुत मदद करेगा। – decitrig

+0

मैं आपकी निराशा को समझता हूं। टेक्स्ट एडिटर कुछ कोड उपयोगिता का उपयोग कर सकता है – reccles

+0

लगभग सभी ओरेकल की तरह, वह लिंक टूटा हुआ है। कोई टूर्नामेंट अब इस ट्यूटोरियल को कहां ढूंढें? –

1

लगता है कि आपको जो करना है, वह आपके संपादक घटक में कुछ प्रकार के प्रमुख श्रोता को लागू करता है जो टेक्स्ट फ़ील्ड में प्रवेश करने से पहले महत्वपूर्ण स्ट्रोक की जांच करता है। फिर यह बफर में वापस खोज सकता है, अपने नियंत्रण पात्रों को ढूंढ सकता है और जो भी करने की आवश्यकता है उसे करें।

मेरे पास जेडिटरपेन्स और इसी तरह के साथ बहुत अधिक अनुभव नहीं है। लेकिन मुझे लगता है कि आप किसी अन्य स्विंग घटक की तरह ही उन्हें मुख्य श्रोताओं को जोड़ सकते हैं।

असल में मुझे नहीं लगता कि इस तरह का एक घटक मौजूद है जो आपको अनिवार्य रूप से स्वयं को लागू करने की आवश्यकता होगी।

हालांकि मैं गलत हो सकता हूं।

+0

हां, मैंने कीलिस्टलिस्टर्स के साथ खेला है, लेकिन वे मुख्य घटना का उपभोग नहीं कर रहे हैं, इसलिए फलक पहले से ही अपनी सामग्री में चरित्र को फंसाने से पहले मैं "ऐसा करने की ज़रूरत नहीं कर सकता"। – decitrig

0

क्या ऐसा होता है जब वे प्रवेश करते हैं, या जब वे डेटा जमा करते हैं?

यदि यह सबमिट हो रहा है, तो डेटा को सहेजने वाले बटन को दबाए रखने के लिए प्रतीक्षा करें, फिर जेईडिटरपेन.getText(), टेक्स्ट को "ठीक करें" करें, और जेडडिटरपेन.सेटटेक्स्ट (टेक्स्ट) करें;

ठीक है, अगर यह फ्लाई पर होना चाहिए, तो इनपुट विधि श्रोता जोड़ने का प्रयास करें। InputMethodEvent "getText()" को कॉल करने में सक्षम होना चाहिए, और आप प्रत्येक कुंजीपटल के बाद इसके लिए पार्स करने में सक्षम होना चाहिए। यदि आप प्रत्येक बार प्रवेश करने के बाद इसे करना चाहते हैं, तो प्रत्येक कुंजीपटल पर टेक्स्ट प्राप्त करें, और देखें कि टेक्स्ट में वर्तमान स्थान \ n, या समान के बाद एक वर्ण है या नहीं।

+0

मैं इसे फ्लाई पर करना चाहता हूं। – decitrig

0

सबसे पहले मैं JTextPane का उपयोग करने की अनुशंसा करता हूं, क्योंकि यह टेक्स्ट को शैलियों को लागू करने के लिए अधिक उपयुक्त है। फिर, एक कुंजी दबाए गए ईवेंट को जोड़ने में बहुत आसान है:

jTextPane1.addKeyListener(new java.awt.event.KeyAdapter() { 
    public void keyPressed(java.awt.event.KeyEvent evt) { 
     jTextPane1KeyPressed(evt); 
    } 
}); 

private void jTextPane1KeyPressed(java.awt.event.KeyEvent evt) { 
    // TODO add your handling code here: 
    String txt = jTextPane1.getText(); 

} 

उपरोक्त कोड नेटबीन्स के साथ आसानी से उत्पन्न किया गया था।

फिर आप कुछ इस तरह कर रही शैलियाँ लागू कर सकते हैं:

StyledDocument doc = jTextPane1.getStyledDocument(); 
Style style = jTextPane1.addStyle("Bold", null); 
StyleConstants.setBold(style, true); 

int pos, endpos; 
// Find pos of word to be displayed in bold 
... 

// Set style 
doc.setCharacterAttributes(pos, endpos, style, true); 
+0

मैंने इसके बारे में भी सोचा; मेरी चिंता यह है कि यह बड़े दस्तावेजों के साथ स्केल नहीं करेगा, क्योंकि यह पूरे पाठ को पढ़ रहा है और प्रत्येक बार दबाए जाने पर सुधार कर रहा है। – decitrig

+0

आप evt.getKeyChar() का उपयोग कर सकते हैं और पूरे टेक्स्ट को पढ़ सकते हैं, केवल तभी जब आवश्यक हो। जब '#' पहली बार दबाया जाता है तो एक झंडा सेट करें और फिर टेक्स्ट को पढ़ें और स्थान/नई लाइन दबाए जाने पर प्रारूप को लागू करें। आपको उस मामले को भी पूरा करना चाहिए जब उपयोगकर्ता पाठ में नियंत्रण को चिपकाता है। आप ऐसी घटनाओं के लिए मेटा वर्णों की निगरानी कर सकते हैं। – kgiannakakis

0

उपयोग RSyntaxTextArea, यह तुम क्या जरूरत है और आप अपने खुद के lexer/नियम जोड़ सकते हैं।

+0

मैं निश्चित रूप से इसे देख लूंगा। – decitrig