//************************************************************* // Java application // 「ClipboardTest」 // //          作 成 者:ルート高菜    //          作成開始月:2006/5 //          最終更新月:2006/6 [TN078/J68] //************************************************************* import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; public class ClipboardTest extends JFrame { //Eclipseの場合、シリアライズ可能クラスでこれがないと警告が出る private static final long serialVersionUID=0; // public static void main(String[] args) { ClipboardTest frame=new ClipboardTest(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //右上×印で終了 frame.setVisible(true); } // JTextArea area; JTextComponent textComponent; // JButton cut=new JButton("cut"); JButton copy=new JButton("copy"); JButton paste=new JButton("paste"); JButton selectall=new JButton("select all"); //コンストラクタ public ClipboardTest(){ // setTitle("ClipboardTest"); setSize(300,300); // area=new JTextArea(); area.setLineWrap(true); area.setTabSize(4); textComponent=(JTextComponent)(area); JScrollPane scPanel=new JScrollPane(area); // JPanel panel=new JPanel(); panel.setBackground(Color.GRAY); panel.add(cut); panel.add(copy); panel.add(paste); panel.add(selectall); //コンテナ枠 Container cp=getContentPane(); cp.add(scPanel,BorderLayout.CENTER); cp.add(panel,BorderLayout.SOUTH); //イベント処理 ButtonAction btn=new ButtonAction(); cut.addActionListener(btn); copy.addActionListener(btn); paste.addActionListener(btn); selectall.addActionListener(btn); // MouseAction mus=new MouseAction(); area.addMouseListener(mus); // KeyboardAction ky=new KeyboardAction(); area.addKeyListener(ky); //最初にボタンの有効・無効を設定 enableButtons(); } //ボタンイベント処理(内部クラス) class ButtonAction implements ActionListener { public void actionPerformed(ActionEvent event){ Object object=event.getSource(); if(object==cut){ textComponent.cut(); }else if(object==copy){ textComponent.copy(); }else if(object==paste){ textComponent.paste(); }else if(object==selectall){ textComponent.selectAll(); } // enableButtons(); //フォーカスをJTextAreaに戻す(そうしないと一部の変更が見えず、動作確認ができない) area.requestFocus(); } } //マウスイベント処理(内部クラス) class MouseAction extends MouseAdapter { //マウス左ボタンが放された public void mouseReleased(MouseEvent event){ if((event.getModifiers() & MouseEvent.BUTTON1_MASK)!=0){ // enableButtons(); } } } //キーイベント処理(内部クラス) class KeyboardAction extends KeyAdapter{ //ショートカットキーへの対応は勝手にしてくれるらしい //こちらではキー開放に合わせてボタンの有効・無効を設定する //Shift+矢印による選択にも対応させる(むしろ全てのキーに対してするべきか?) public void keyReleased(KeyEvent event){ switch(event.getKeyCode()){ case KeyEvent.VK_DOWN: //矢印キー case KeyEvent.VK_UP: case KeyEvent.VK_RIGHT: case KeyEvent.VK_LEFT: case KeyEvent.VK_X: //cut case KeyEvent.VK_C: //copy case KeyEvent.VK_V: //paste case KeyEvent.VK_A: //select all // enableButtons(); break; } } } //ボタンの有効・無効 private void enableButtons(){ //cut copy String selected=textComponent.getSelectedText(); boolean flag=((selected!=null && selected.length()>0)); cut.setEnabled(flag); copy.setEnabled(flag); //paste Clipboard cb=Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable t=cb.getContents(this); paste.setEnabled(t.isDataFlavorSupported(DataFlavor.stringFlavor)); } }