| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「JTextComponent 1」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
1行目: 1行目:
==JTextComponent 1==
+
==[[JTextComponent 1]]==
 
[[Jython JTextComponent 1]] | [[Jython Swing]] | [[Swing]] | [[Jython]] | [[Python]] |  
 
[[Jython JTextComponent 1]] | [[Jython Swing]] | [[Swing]] | [[Jython]] | [[Python]] |  
  
7行目: 7行目:
 
*メニューとアクションの割付
 
*メニューとアクションの割付
 
*キーボード押下との割付
 
*キーボード押下との割付
*Undo、Redoの実装
+
*Undo、[[R]]edoの実装
 
*Documentの利用
 
*Documentの利用
 
*Documentのイベント感知
 
*Documentのイベント感知
27行目: 27行目:
 
  import javax.swing.Action;
 
  import javax.swing.Action;
 
  import javax.swing.InputMap;
 
  import javax.swing.InputMap;
  import javax.swing.JFrame;
+
  import javax.swing.[[JFrame]];
  import javax.swing.JMenu;
+
  import javax.swing.J[[Menu]];
  import javax.swing.JMenuBar;
+
  import javax.swing.J[[Menu]]Bar;
 
  import javax.swing.JScrollPane;
 
  import javax.swing.JScrollPane;
 
  import javax.swing.JTextArea;
 
  import javax.swing.JTextArea;
 
  import javax.swing.KeyStroke;
 
  import javax.swing.KeyStroke;
  import javax.swing.SwingUtilities;
+
  import javax.swing.[[Swing]]Utilities;
 
  import javax.swing.event.UndoableEditEvent;
 
  import javax.swing.event.UndoableEditEvent;
 
  import javax.swing.event.UndoableEditListener;
 
  import javax.swing.event.UndoableEditListener;
45行目: 45行目:
 
   */
 
   */
 
  public class JTextTest {
 
  public class JTextTest {
     private JFrame frame;
+
     private [[JFrame]] frame;
 
      
 
      
 
     private Map<Object, Action> actionMap = new HashMap<Object, Action>();
 
     private Map<Object, Action> actionMap = new HashMap<Object, Action>();
51行目: 51行目:
 
      
 
      
 
     private UndoAction undoAction;
 
     private UndoAction undoAction;
     private RedoAction redoAction;
+
     private [[R]]edoAction redoAction;
 
      
 
      
     private JMenu getMenu() {
+
     private J[[Menu]] get[[Menu]]() {
         JMenu menu = new JMenu("Edit");
+
         J[[Menu]] menu = new J[[Menu]]("Edit");
 
          
 
          
 
         menu.add(actionMap.get(DefaultEditorKit.cutAction));
 
         menu.add(actionMap.get(DefaultEditorKit.cutAction));
64行目: 64行目:
 
         menu.add(undoAction);
 
         menu.add(undoAction);
 
          
 
          
         redoAction = new RedoAction();
+
         redoAction = new [[R]]edoAction();
 
         menu.add(redoAction);
 
         menu.add(redoAction);
 
          
 
          
79行目: 79行目:
 
     }
 
     }
 
     private void createUI() {
 
     private void createUI() {
         frame = new JFrame("TextTest");
+
         frame = new [[JFrame]]("TextTest");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
         frame.setDefaultCloseOperation([[JFrame]].EXIT_ON_CLOSE);
 
   
 
   
 
         JTextArea txtArea = new JTextArea(10, 30);
 
         JTextArea txtArea = new JTextArea(10, 30);
 
   
 
   
         // Documentのイベント感知(Undo Redo 管理を行う)
+
         // Documentのイベント感知(Undo [[R]]edo 管理を行う)
 
         Document doc = txtArea.getDocument();
 
         Document doc = txtArea.getDocument();
 
         doc.addUndoableEditListener(
 
         doc.addUndoableEditListener(
96行目: 96行目:
 
         );
 
         );
 
          
 
          
         frame.getContentPane().add(new JScrollPane(txtArea), BorderLayout.CENTER);
+
         frame.getContentPane().add(new JScrollPane(txtArea), BorderLayout.CENTE[[R]]);
 
          
 
          
 
         // TextComponentが持つActionをMapに格納
 
         // TextComponentが持つActionをMapに格納
 
         createActionMap(txtArea);
 
         createActionMap(txtArea);
 
         // メニューを作成
 
         // メニューを作成
         JMenu menu = getMenu();
+
         J[[Menu]] menu = get[[Menu]]();
         JMenuBar mb = new JMenuBar();
+
         J[[Menu]]Bar mb = new J[[Menu]]Bar();
 
         mb.add(menu);
 
         mb.add(menu);
         frame.setJMenuBar(mb);
+
         frame.setJ[[Menu]]Bar(mb);
 
          
 
          
         // テキストのUndo、Redoにキーを割り当てる (Ctrl+z,Ctrl+y)
+
         // テキストのUndo、[[R]]edoにキーを割り当てる (Ctrl+z,Ctrl+y)
 
         InputMap inputMap = txtArea.getInputMap();
 
         InputMap inputMap = txtArea.getInputMap();
         KeyStroke undoKey = KeyStroke.getKeyStroke(KeyEvent.VK_Z,Event.CTRL_MASK);
+
         KeyStroke undoKey = KeyStroke.getKeyStroke(KeyEvent.VK_Z,Event.CT[[R]]L_MASK);
         KeyStroke redoKey = KeyStroke.getKeyStroke(KeyEvent.VK_Y,Event.CTRL_MASK);
+
         KeyStroke redoKey = KeyStroke.getKeyStroke(KeyEvent.VK_Y,Event.CT[[R]]L_MASK);
 
         inputMap.put(undoKey, undoAction);
 
         inputMap.put(undoKey, undoAction);
 
         inputMap.put(redoKey, redoAction);
 
         inputMap.put(redoKey, redoAction);
117行目: 117行目:
 
     }
 
     }
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
         SwingUtilities.invokeLater(
+
         [[Swing]]Utilities.invokeLater(
                 new Runnable(){
+
                 new [[R]]unnable(){
 
                     public void run() {
 
                     public void run() {
 
                         JTextTest jft = new JTextTest();
 
                         JTextTest jft = new JTextTest();
140行目: 140行目:
 
             }
 
             }
 
             updateState();
 
             updateState();
             // Redo を可能に
+
             // [[R]]edo を可能に
 
             redoAction.updateState();
 
             redoAction.updateState();
 
         }
 
         }
149行目: 149行目:
 
      
 
      
 
     @SuppressWarnings("serial")
 
     @SuppressWarnings("serial")
     class RedoAction extends AbstractAction {
+
     class [[R]]edoAction extends AbstractAction {
         public RedoAction() {
+
         public [[R]]edoAction() {
             super("Redo");
+
             super("[[R]]edo");
 
             setEnabled(false);
 
             setEnabled(false);
 
         }
 
         }
163行目: 163行目:
 
         }
 
         }
 
         public void updateState() {
 
         public void updateState() {
             setEnabled(undo.canRedo());
+
             setEnabled(undo.can[[R]]edo());
 
         }
 
         }
 
     }
 
     }
 
  }
 
  }

2020年2月16日 (日) 04:28時点における最新版

JTextComponent 1

Jython JTextComponent 1 | Jython Swing | Swing | Jython | Python |

内容

  • メニューとアクションの割付
  • キーボード押下との割付
  • Undo、Redoの実装
  • Documentの利用
  • Documentのイベント感知

ソースコード

実行例

0740 jtext.jpg

ソースコード
import java.awt.BorderLayout;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.Map;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
import javax.swing.undo.UndoManager;

/**
 * @see http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#commands
 */
public class JTextTest {
    private JFrame frame;
    
    private Map<Object, Action> actionMap = new HashMap<Object, Action>();
    private UndoManager undo = new UndoManager();
    
    private UndoAction undoAction;
    private RedoAction redoAction;
    
    private JMenu getMenu() {
        JMenu menu = new JMenu("Edit");
        
        menu.add(actionMap.get(DefaultEditorKit.cutAction));
        menu.add(actionMap.get(DefaultEditorKit.copyAction));
        menu.add(actionMap.get(DefaultEditorKit.pasteAction));
        menu.addSeparator();
        
        undoAction = new UndoAction();
        menu.add(undoAction);
        
        redoAction = new RedoAction();
        menu.add(redoAction);
        
        menu.addSeparator();
        menu.add(actionMap.get(DefaultEditorKit.selectAllAction));
        
        return menu;
    }
    private void createActionMap(JTextComponent txt) {
        Action[] actions = txt.getActions();
        for(Action action : actions) {
            this.actionMap.put(action.getValue(Action.NAME), action);
        }
    }
    private void createUI() {
        frame = new JFrame("TextTest");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTextArea txtArea = new JTextArea(10, 30);

        // Documentのイベント感知(Undo Redo 管理を行う)
        Document doc = txtArea.getDocument();
        doc.addUndoableEditListener(
            new UndoableEditListener() {
                public void undoableEditHappened(UndoableEditEvent e) {
                    undo.addEdit(e.getEdit());
                    undoAction.updateState();
                    redoAction.updateState();
                }
            }
        );
        
        frame.getContentPane().add(new JScrollPane(txtArea), BorderLayout.CENTER);
        
        // TextComponentが持つActionをMapに格納
        createActionMap(txtArea);
        // メニューを作成
        JMenu menu = getMenu();
        JMenuBar mb = new JMenuBar();
        mb.add(menu);
        frame.setJMenuBar(mb);
        
        // テキストのUndo、Redoにキーを割り当てる (Ctrl+z,Ctrl+y)
        InputMap inputMap = txtArea.getInputMap();
        KeyStroke undoKey = KeyStroke.getKeyStroke(KeyEvent.VK_Z,Event.CTRL_MASK);
        KeyStroke redoKey = KeyStroke.getKeyStroke(KeyEvent.VK_Y,Event.CTRL_MASK);
        inputMap.put(undoKey, undoAction);
        inputMap.put(redoKey, redoAction);
        
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(
                new Runnable(){
                    public void run() {
                        JTextTest jft = new JTextTest();
                        jft.createUI();
                    }
                }
        );
    }
    
    @SuppressWarnings("serial")
    class UndoAction extends AbstractAction {
        public UndoAction() {
            super("Undo");
            setEnabled(false);
        }
        public void actionPerformed(ActionEvent e) {
            try {
                undo.undo();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            updateState();
            // Redo を可能に
            redoAction.updateState();
        }
        public void updateState() {
            setEnabled(undo.canUndo());
        }
    }
    
    @SuppressWarnings("serial")
    class RedoAction extends AbstractAction {
        public RedoAction() {
            super("Redo");
            setEnabled(false);
        }
        public void actionPerformed(ActionEvent e) {
            try {
                undo.redo();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            updateState();
        }
        public void updateState() {
            setEnabled(undo.canRedo());
        }
    }
}