posts - 38,  comments - 22,  trackbacks - 0

          package urdo;

          import java.awt.BorderLayout;
          import java.awt.event.ActionEvent;
          import java.awt.event.InputEvent;
          import java.awt.event.KeyEvent;

          import javax.swing.AbstractAction;
          import javax.swing.Action;
          import javax.swing.JButton;
          import javax.swing.JMenu;
          import javax.swing.JMenuBar;
          import javax.swing.JMenuItem;
          import javax.swing.JPanel;
          import javax.swing.JScrollPane;
          import javax.swing.JTextArea;
          import javax.swing.KeyStroke;
          import javax.swing.UIManager;
          import javax.swing.WindowConstants;
          import javax.swing.event.UndoableEditEvent;
          import javax.swing.event.UndoableEditListener;
          import javax.swing.undo.CannotRedoException;
          import javax.swing.undo.CannotUndoException;
          import javax.swing.undo.UndoManager;

          public class NewJFrame extends javax.swing.JFrame {
          ?private JPanel jp1;

          ?private JButton jb1;

          ?private JButton jb2;

          ?private JMenuItem jm12;

          ?private JMenuItem jm11;

          ?private JMenu jm;

          ?private JMenuBar jMenuBar1;

          ?private JTextArea jta;

          ?private JScrollPane jsp;

          ?/**
          ? * Auto-generated main method to display this JFrame
          ? */
          ?public static void main(String[] args) {
          ??NewJFrame inst = new NewJFrame();
          ??inst.setVisible(true);
          ?}

          ?public NewJFrame() {
          ??super();
          ??initGUI();
          ?}

          ?private void initGUI() {
          ??try {
          ???setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
          ???{
          ????jMenuBar1 = new JMenuBar();
          ????setJMenuBar(jMenuBar1);
          ????{
          ?????jm = new JMenu();
          ?????jMenuBar1.add(jm);
          ?????jm.setText("jm");
          ?????{
          ??????jm11 = new JMenuItem(redoAction);
          ??????jm.add(jm11);
          ??????jm11.setText("re");
          ?????}
          ?????{
          ??????jm12 = new JMenuItem(undoAction);
          ??????jm.add(jm12);
          ??????jm12.setText("undo");
          ?????}
          ?????jm12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,
          ???????InputEvent.CTRL_MASK));
          ????}
          ???}
          ???{
          ????jp1 = new JPanel();
          ????getContentPane().add(jp1, BorderLayout.NORTH);
          ????jp1.setPreferredSize(new java.awt.Dimension(392, 35));
          ????{
          ?????jb1 = new JButton(redoAction);
          ?????jp1.add(jb1);
          ?????jb1.setText("redo");
          ????}
          ????//????jb1.registerKeyboardAction(redoAction, KeyStroke.getKeyStroke(
          ????//??????KeyEvent.VK_Y, KeyEvent.CTRL_DOWN_MASK, true),
          ????//??????JComponent.WHEN_IN_FOCUSED_WINDOW);
          ????{
          ?????jb2 = new JButton(undoAction);
          ?????jp1.add(jb2);
          ?????jb2.setText("undo");
          ????}
          ????//????jb2.registerKeyboardAction(undoAction, KeyStroke.getKeyStroke(
          ????//??????KeyEvent.VK_Z, KeyEvent.CTRL_DOWN_MASK, true),
          ????//??????JComponent.WHEN_IN_FOCUSED_WINDOW);

          ???}
          ???{
          ????jsp = new JScrollPane();
          ????getContentPane().add(jsp, BorderLayout.CENTER);
          ????{
          ?????jta = new JTextArea();
          ?????jsp.setViewportView(jta);
          ?????jta.getDocument().addUndoableEditListener(undoHandler);
          ????}
          ???}
          ???pack();
          ???setSize(400, 300);
          ??} catch (Exception e) {
          ???e.printStackTrace();
          ??}
          ?}

          ?protected UndoableEditListener undoHandler = new UndoHandler();

          ?protected UndoManager undo = new UndoManager();

          ?private UndoAction undoAction = new UndoAction();

          ?private RedoAction redoAction = new RedoAction();

          ?class UndoHandler implements UndoableEditListener {

          ??/**
          ?? * Messaged when the Document has created an edit, the edit is
          ?? * added to <code>undo</code>, an instance of UndoManager.
          ?? */
          ??public void undoableEditHappened(UndoableEditEvent e) {
          ???undo.addEdit(e.getEdit());
          ???undoAction.update();
          ???redoAction.update();
          ??}
          ?}

          ?class UndoAction extends AbstractAction {
          ??public UndoAction() {
          ???super();
          ???setEnabled(false);
          ??}

          ??public void actionPerformed(ActionEvent e) {
          ???try {
          ????undo.undo();
          ???} catch (CannotUndoException ex) {
          ????ex.printStackTrace();
          ???}
          ???update();
          ???redoAction.update();
          ??}

          ??protected void update() {
          ???if (undo.canUndo()) {
          ????setEnabled(true);
          ????//????System.out.println(undo.getUndoPresentationName());
          ????putValue(Action.NAME, undo.getUndoPresentationName());
          ???} else {
          ????setEnabled(false);
          ????putValue(Action.NAME, "撤消");
          ???}
          ??}
          ?}

          ?class RedoAction extends AbstractAction {
          ??public RedoAction() {
          ???super();
          ???setEnabled(false);
          ??}

          ??public void actionPerformed(ActionEvent e) {
          ???try {
          ????undo.redo();
          ???} catch (CannotRedoException ex) {
          ????ex.printStackTrace();
          ???}
          ???update();
          ???undoAction.update();
          ??}

          ??protected void update() {
          ???if (undo.canRedo()) {
          ????setEnabled(true);
          ????putValue(Action.NAME, undo.getRedoPresentationName());
          ???} else {
          ????setEnabled(false);
          ????putValue(Action.NAME, "重做");
          ???}
          ??}
          ?}
          }

          posted on 2007-01-25 09:46 aaabbb 閱讀(699) 評論(1)  編輯  收藏 所屬分類: Swing
          主站蜘蛛池模板: 建宁县| 长治市| 遂平县| 清流县| 兴和县| 黎川县| 溧水县| 内黄县| 淄博市| 革吉县| 都匀市| 东阳市| 抚宁县| 绵竹市| 黑山县| 八宿县| 德化县| 英超| 五华县| 东丰县| 兴宁市| 天祝| 宁化县| 深圳市| 略阳县| 光泽县| 崇左市| 乌鲁木齐县| 萝北县| 弋阳县| 宜黄县| 江永县| 英山县| 南华县| 大英县| 荆州市| 茌平县| 铁岭县| 亚东县| 唐河县| 镇赉县|