2010-03-30 12 views
8

के लिए पूर्ववत और फिर से उपयोग करना मैं जावा स्विंग का उपयोग कर एक टेक्स्ट एडिटर बना रहा हूं। मैं इसके लिए JTextArea का उपयोग कर रहा हूं। मैं जानना चाहता हूं कि मैं JTextArea में पूर्ववत और फिर से कार्यक्षमता का उपयोग कैसे कर सकता हूं क्योंकि मैं इसका उपयोग करने में सक्षम नहीं हूं।JTextArea

उत्तर

11

जैसा कि मैं इसे समझता हूं, JTextArea में अंतर्निहित पूर्ववत/पुनः कार्यक्षमता नहीं है, लेकिन Google search को this article मिला जो उपयोगी हो सकता है।

वहां Undo Managerjavax.swing में स्पष्ट रूप से मौजूद है, जिसे आप JTextArea की परिवर्तन घटनाओं तक जोड़ सकते हैं।

+1

यहां एक पूर्ण उदाहरण के साथ एक लिंक है: http://www.java-forums.org/javax-swing/9570-undo-redo-jtextarea.html –

+0

धन्यवाद पीटर। मुझे मेरी समस्या हल हो गई। – Logan

+0

@ पीटर आपके लिंक के पीछे कोड संभाल नहीं करता है जब सभी पाठ का चयन किया जाता है और क्लिपबोर्ड की सामग्री के साथ प्रतिस्थापित किया जाता है। क्या होता है पाठ क्षेत्र को अपनी पूर्व सामग्री के साथ प्रतिस्थापित करने के बजाय खाली किया जाता है। रिप्रो: (1) क्लिपबोर्ड में कुछ डालें, (2) टेक्स्ट एरिया में सभी पात्रों का चयन करें, (3) चयनित सामग्री पर क्लिपबोर्ड पेस्ट करने के लिए^वी दबाएं। मुझे अभी तक पता नहीं है कि क्या हो रहा है लेकिन मुझे पता लगाना है। इस उत्तर में पोस्ट किए गए लिंक के पीछे कोड के लिए भी यही है। मुझे लगता है कि समस्या "पिछली सामग्री" की परिभाषा है। – jeff6times7

5

इसके थोड़ी देर गया है, क्योंकि मैं इस किया था और मैं विवरण याद नहीं है, लेकिन यहाँ कुछ जानकारी के साथ एक लिंक है: http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html

शीर्षक वाले भाग पर स्क्रॉल "एक दस्तावेज़ पर परिवर्तन के लिए सुनकर" आरंभ करने के लिए ।

+3

+1, जो व्यक्ति इसे डाउनवॉटेड करता है ?? ट्यूटोरियल में एक कामकाजी उदाहरण है और यह बताता है कि क्या हो रहा है, जो निश्चित रूप से प्रश्न का उत्तर देता है। अब यह ट्यूटोरियल पढ़ने के लिए ओपी पर निर्भर है, असल में ओपी को इस प्रश्न को पोस्ट करने से पहले ट्यूटोरियल पढ़ना चाहिए था। असल में, अगर उपयोगकर्ता को स्विंग ट्यूटोरियल से अवगत नहीं था, तो उन्हें पता चलने से पहले कि वे एक मूल्यवान संदर्भ तक पहुंच सकते हैं जो भविष्य के सवालों पर मदद कर सकता है। इस तरह सभी सवालों का जवाब दिया जाना चाहिए। – camickr

+0

आपके तरह के शब्दों के लिए धन्यवाद :) –

+0

आपके उपहासपूर्ण टिप्पणी कैमिकर के लिए धन्यवाद। मार्शल की सहायता के लिए धन्यवाद। – Logan

4

आप इस

UndoManager manager = new UndoManager(); 
textArea.getDocument().addUndoableEditListener(manager); 

की तरह कर सकते हैं एक बार प्रबंधक JTextArea के दस्तावेज़ से जुड़ा हुआ है, यह सब पाठ क्षेत्र की सामग्री को किए गए परिवर्तन निगरानी करेंगे।

पाठ घटक को प्रबंधक को जोड़ने के बाद, आपको प्रबंधक को ऑपरेशन को पूर्ववत/दोबारा करने के लिए कुछ साधन प्रदान करना होगा।

कॉल सार्वजनिक शून्य पूर्ववत() और सार्वजनिक शून्य फिर से करें() UndoManager जहां आवश्यक (उदा। ActionPerformed() एक ActionListener की विधि)

आप कार्रवाई संलग्न कर सकते हैं निम्नलिखित तरीके से एक बटन के लिए वस्तुओं की विधि बजाय() पूर्ववत करें या फिर बुला() पद्धतियों जो कार्य को सरल की:

JButton undoButton = new JButton(UndoManagerHelper.getUndoAction(manager)); 
JButton redoButton = new JButton(UndoManagerHelper.getRedoAction(manager)); 
1

मैं सिर्फ पर्याप्त मदद पाने के लिए अनेक लिंक द्वारा जाना पड़ा। मैं यहां जोड़ रहा हूं कि मैंने भविष्य के आगंतुकों की सहायता के लिए सफलतापूर्वक क्या कार्यान्वित किया। मैंने इसे JTextPane का उपयोग करके कार्यान्वित किया है, लेकिन मुझे लगता है कि यह JTextArea

JTextArea textArea = new JTextArea(); 
    JButton undo = new JButton("Undo"); 
    JButton redo = new JButton("Redo"); 
    KeyStroke undoKeyStroke = KeyStroke.getKeyStroke(
      KeyEvent.VK_Z, Event.CTRL_MASK); 
    KeyStroke redoKeyStroke = KeyStroke.getKeyStroke(
      KeyEvent.VK_Y, Event.CTRL_MASK); 

    UndoManager undoManager = new UndoManager(); 

    Document document = textArea.getDocument(); 
    document.addUndoableEditListener(new UndoableEditListener() { 
     @Override 
     public void undoableEditHappened(UndoableEditEvent e) { 
      undoManager.addEdit(e.getEdit()); 
     } 
    }); 

    // Add ActionListeners 
    undo.addActionListener((ActionEvent e) -> { 
     try { 
      undoManager.undo(); 
     } catch (CannotUndoException cue) {} 
    }); 
    redo.addActionListener((ActionEvent e) -> { 
     try { 
      undoManager.redo(); 
     } catch (CannotRedoException cre) {} 
    }); 

    // Map undo action 
    textArea.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) 
      .put(undoKeyStroke, "undoKeyStroke"); 
    textArea.getActionMap().put("undoKeyStroke", new AbstractAction() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      try { 
       undoManager.undo(); 
      } catch (CannotUndoException cue) {} 
     } 
    }); 
    // Map redo action 
    textArea.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) 
      .put(redoKeyStroke, "redoKeyStroke"); 
    textArea.getActionMap().put("redoKeyStroke", new AbstractAction() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      try { 
       undoManager.redo(); 
      } catch (CannotRedoException cre) {} 
     } 
    }); 
संबंधित मुद्दे