این آموزش به شما یاد میدهد چگونه یک برنامه در جاوا ایجاد کنید که با استفاده از یک کلید میانبر ctrl+z، متن را قابل بازگشت کنید. پس الان بیایید این آموزش را شروع کنیم! 1. JCreator یا NetBeans را باز کنید و یک برنامه جاوا با نام undoCtrlZ.java ایجاد کنید. 2. کتابخانههای پکیج زیر را وارد کنید:
import java.awt.event.*; // برای دسترسی به کلاس ActionEvent
import javax.swing.*; // برای دسترسی به کلاسهای AbstractAction، JFrame، JScrollPane، JTextArea، و KeyStroke
import javax.swing.event.*; // برای دسترسی به کلاسهای UndoableEditEvent و UndoableEditListener
import javax.swing.text.*;// برای دسترسی به کلاسهای Document و JTextComponent
import javax.swing.undo.*; // برای دسترسی به کلاسهای CannotUndoException و UndoManager
3. متغیرها را در Main مقداردهی اولیه کنید: frame به JFrame، txtArea به JTextArea، undo به UndoManager و اعلام آن به عنوان final زیرا که یک کلاس داخلی برای آن ایجاد خواهیم کرد، و doc به Document.
JFrame frame = new JFrame(); // نمونهگیری از frame
JTextArea txtArea = new JTextArea(); // نمونهگیری از textArea
final UndoManager undo = new UndoManager(); // نمونهگیری از UndoManager
Document doc = txtArea.getDocument(); // نمونهگیری از یک Document از txtArea
4. یک کلاس داخلی برای UndoableEditEvent در doc در textArea بسازید. این باعث میشود که textArea قابل ویرایش باشد.
doc.addUndoableEditListener(new UndoableEditListener() {
public void undoableEditHappened(UndoableEditEvent evt) {
undo.addEdit(evt.getEdit());
}
});
5. یک کلاس داخلی بسازید که دارای رویداد undo در textArea باشد. این از متد getActionMap استفاده خواهد کرد.
txtArea.getActionMap().put("Undo", new AbstractAction("Undo") {
public void actionPerformed(ActionEvent evt) {
try {
if (undo.canUndo()) {
undo.undo();
}
} catch (CannotUndoException e) {
}
}
});
برای داشتن یک میانبر ctrl+z برای undo، کد زیر را داشته باشید:
txtArea.getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");
6. در آخر، اجزا را اضافه کنید، اندازه و قابلیت دیدن آنها را true کنید، و عملیات بسته شدن را انجام دهید.
txtArea.getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(txtArea));
frame.setSize(380, 320);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
اینجا کد کامل این آموزش است:
import java.awt.event.*; // برای دسترسی به کلاس ActionEvent
import javax.swing.*; // برای دسترسی به کلاسهای AbstractAction، JFrame، JScrollPane، JTextArea، و KeyStroke
import javax.swing.event.*; // برای دسترسی به کلاسهای UndoableEditEvent و UndoableEditListener
import javax.swing.text.*;// برای دسترسی به کلاسهای Document و JTextComponent
import javax.swing.undo.*; // برای دسترسی به کلاسهای CannotUndoException و UndoManager
public class undoCtrlZ {
public static void main(String[] args) {
JFrame frame = new JFrame("Ctrl+Z Undo"); // نمونهگیری از frame
JTextArea txtArea = new JTextArea(); // نمونهگیری از textArea
final UndoManager undo = new UndoManager(); // نمونهگیری از UndoManager
Document doc = txtArea.getDocument(); // نمونهگیری از یک Document از txtArea
doc.addUndoableEditListener(new UndoableEditListener() {
public void undoableEditHappened(UndoableEditEvent evt) {
undo.addEdit(evt.getEdit());
}
});
txtArea.getActionMap().put("Undo", new AbstractAction("Undo") {
public void actionPerformed(ActionEvent evt) {
try {
if (undo.canUndo()) {
undo.undo();
}
} catch (CannotUndoException e) {
}
}
});
txtArea.getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(txtArea));
frame.setSize(380, 320);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}