دسترسی به Clipboard

برای استفاده از عملیاتهای Clipboard مانند Cut, Copy , Paste  احتیاجی به دسترسی به کلاس Transferable نمی باشد(کلاس Transferable کلاسی است که می تواند اطلاعات ClipBorad را خوانده و یا چیزی در آن بنویسد) و در عوض می توان از متدهای

public void cut() , public void copy() , public void Paste استفاده کرد. شما می توانید این متدها را مستقیماً از یک ActionListener که با استفاده از یک MenuIetm و یا  Button ایجاد شده است فراخوانی کنید. مانند قطعه کد زیر :

ActionListener cutListener = new ActionListener(){

                public void actionPerformed(ActionEvent evt){

                                jTextField1.cut();

                }

}

 

JButton button = new JButton("Cut");

button.addActionListener(cutListener);

یک راه آسانتر که دیگر نیازی به تعریف  ActionListener نباشد، استفاده از خاصیت actions است. این خاصیت شامل آرایه ایی از Action ها بوده که می توان هر کدام از آنها را به Button و یا MenuItem نسبت داد. پس از اینکه تمام Action های JTextfield توسط متد getActions گرفته و در آرایه []Actions قرار داده شد، می توان بوسیله کلاس DefaultEditorKey به همراه نام action به Action مورد نظر  دسترسی پیدا کرد. کد های زیر نحوه انجام این کار را نشان می دهند.

Action actios[] = jTextfield1.getActions();

Action cutAction = TextUtilities.findAction(actions , DefaultEditorKey.cutAction);

پس پیدا کردن Action  مورد نظر می توان آنرا به یک Button با سازنده public JButton(Action action و یا هر کنترل دیگر نسبت داد .

برای ساده تر نمودن مطلب، کلاسی بنام TextUtil تعریف نموده ام که با استفاده از نام عملگر(cut,copy,paste) میتوان آبجکت Action آنرا پیدا نماید. کدهای این کلاس بصورت زیر میباشد.

public TextUtilities() {

    }

    public static Action findAction(Action actions[] , String key){

        Hashtable<Object , Action> commands = new Hashtable<Object , Action>();

        for(int i = 0 ; i < actions.length ; i++){

            Action action = actions[i];

            commands.put(action.getValue(Action.NAME) , action);

        }

        return commands.get(key);

    }

}

پس از تعریف کلاس فوق، می توان از آن بصورت زیر استفاده نمود :

jTextField1 = new javax.swing.JTextField();

javax.swing.Action actions[] = jTextField1.getActions(); (1)

 

javax.swing.Action cutAction = TextUtilities.findAction(actions ,

       javax.swing.text.DefaultEditorKit.cutAction); (2)

 

javax.swing.Action copyAction = TextUtilities.findAction(actions ,  javax.swing.text.DefaultEditorKit.copyAction);

 

javax.swing.Action pasteAction = TextUtilities.findAction(actions ,    javax.swing.text.DefaultEditorKit.pasteAction);

 

jButton1 = new javax.swing.JButton();

jButton1.setAction(cutAction);

jButton1.setText("Cut");

 

jButton2 = new javax.swing.JButton();

jButton2.setAction(copyAction);

jButton2.setText("Copy");

 

jButton3 = new javax.swing.JButton();

jButton3.setAction(pasteAction);

jButton3.setText("Paste");