.net+套用java+applet_关于Java Applet使用Client和Net两种启动方式时复制粘贴的实现

使用情景:

关于Java Applet使用Client和Net两种启动方式时复制粘贴的实现

MyApplet.java

import java.awt.BorderLayout;

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;

import java.net.URLEncoder;

import javax.swing.JApplet;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.text.JTextComponent;

public class MyApplet extends JApplet {

private String startType = "net";

private CopyPasteMenu copyPasteMenu;

private JPanel jpContext;

@Override

public void init() {

jpContext = new JPanel(new BorderLayout());

this.getContentPane().add(jpContext);

initComponent();

}

public void setStartType(String startType) {

this.startType = startType;

}

public void setCopyPasteMenu(CopyPasteMenu copyPasteMenu) {

this.copyPasteMenu = copyPasteMenu;

}

public JPanel getContextPanel() {

return jpContext;

}

private void initComponent() {

JTextArea jTextArea = new JTextArea();

jTextArea.addMouseListener(new CopyPasteMenu(jTextArea, this));

JScrollPane jsp = new JScrollPane(jTextArea);

jpContext.add(jsp, BorderLayout.CENTER);

}

public boolean isNetStart() {

return startType.equals("net");

}

public boolean isClientStart() {

return startType.equals("client");

}

public String dealTextCopy(String value) {

if (value == null || "null".equals(value)) {

return "";

}

value = decodeByUTF8(value);

JTextComponent jTextComponent = copyPasteMenu.getjTextComponent();

jTextComponent.replaceSelection(value);

return jTextComponent.getText();

}

public String encodeByUTF8(String value) {

String str = "";

if (value != null) {

try {

str = URLEncoder.encode(value, "UTF-8");

} catch (UnsupportedEncodingException ex) {

ex.printStackTrace();

}

}

return str;

}

public String decodeByUTF8(String value) {

String str = "";

if (value != null) {

try {

str = URLDecoder.decode(value, "UTF-8");

} catch (UnsupportedEncodingException ex) {

ex.printStackTrace();

}

}

return str;

}

public static void main(String[] args) {

MyApplet myApplet = new MyApplet();

myApplet.setStartType("client");

myApplet.init();

JFrame jFrame = new JFrame("Test Copy/Paste");

jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);

jFrame.setSize(300, 300);

jFrame.getContentPane().add(myApplet.getContextPanel());

jFrame.setLocationRelativeTo(null);

jFrame.setVisible(true);

}

}

CopyPasteMenu.java

import java.awt.datatransfer.Clipboard;

import java.awt.datatransfer.DataFlavor;

import java.awt.datatransfer.StringSelection;

import java.awt.datatransfer.Transferable;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.InputEvent;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.JComponent;

import javax.swing.JMenuItem;

import javax.swing.JPopupMenu;

import javax.swing.KeyStroke;

import javax.swing.text.JTextComponent;

import netscape.javascript.JSObject;

public class CopyPasteMenu extends MouseAdapter implements ActionListener {

public static final String CUT = "Cut";

public static final String COPY = "Copy";

public static final String PASTE = "Paste";

private JPopupMenu popupMenu;

private JMenuItem jmiCopy, jmiPaste, jmiCut;

private JTextComponent jTextComponent;

MyApplet target;

public CopyPasteMenu(JTextComponent jTextComponent, MyApplet target) {

this.jTextComponent = jTextComponent;

this.target = target;

popupMenu = new JPopupMenu();

jmiCut = new JMenuItem(CUT);

jmiCopy = new JMenuItem(COPY);

jmiPaste = new JMenuItem(PASTE);

jmiCut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK));

jmiCopy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK));

jmiPaste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK));

jmiCut.addActionListener(this);

jmiCopy.addActionListener(this);

jmiPaste.addActionListener(this);

popupMenu.add(jmiCut);

popupMenu.add(jmiCopy);

popupMenu.add(jmiPaste);

jTextComponent.addMouseListener(this);

jTextComponent.registerKeyboardAction(this, CUT, KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK), JComponent.WHEN_FOCUSED);

jTextComponent.registerKeyboardAction(this, PASTE, KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_MASK), JComponent.WHEN_FOCUSED);

jTextComponent.registerKeyboardAction(this, COPY, KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK), JComponent.WHEN_FOCUSED);

}

public boolean isCanCopy() {

String selectedText = jTextComponent.getSelectedText();

if (selectedText == null || selectedText.equals("")) {

return false;

} else {

return true;

}

}

public JTextComponent getjTextComponent() {

return jTextComponent;

}

@Override

public void mousePressed(MouseEvent e) {

if (e.getButton() == MouseEvent.BUTTON3) {

jmiCut.setEnabled(isCanCopy());

jmiCopy.setEnabled(isCanCopy());

jmiPaste.setEnabled(true);

popupMenu.show(jTextComponent, e.getX(), e.getY());

}

}

public void actionPerformed(ActionEvent e) {

String str = e.getActionCommand();

if (str.equals(CUT)) {

dealCopy();

jTextComponent.replaceSelection("");

} else if (str.equals(COPY)) {

dealCopy();

} else if (str.equals(PASTE)) {

dealPaste();

}

}

private void dealCopy() {

if (target.isNetStart()) {

String value = jTextComponent.getSelectedText();

JSObject.getWindow(target).eval("javascript:setClipboard('" + target.encodeByUTF8(value) + "')");

} else {

String selection = jTextComponent.getSelectedText();

StringSelection clipString = new StringSelection(selection);

Clipboard clipboard = target.getToolkit().getSystemClipboard();

clipboard.setContents(clipString, clipString);

}

}

private void dealPaste() {

try {

if (target.isNetStart()) {

target.setCopyPasteMenu(this);

JSObject.getWindow(target).eval("javascript:getTextClipData()");

} else {

Clipboard clipboard = target.getToolkit().getSystemClipboard();

Transferable clipData = clipboard.getContents("text");

String clipString = (String) clipData.getTransferData(DataFlavor.stringFlavor);

jTextComponent.replaceSelection(clipString);

}

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

.jsp

function getTextClipData(){

var value;

value = getClipboard();

window.document.MyApplet.dealTextCopy(value);

}

function setClipboard(value) {

if (window.clipboardData) {

return (window.clipboardData.setData("text", value));

} else if (window.netscape) {

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);

if (!clip) {

return;

}

var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);

if (!trans) {

return;

}

trans.addDataFlavor('text/unicode');

var str = new Object();

var len = new Object();

var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);

var copytext = value;

str.data=copytext;

trans.setTransferData("text/unicode",str,copytext.length*2);

var clipid = Components.interfaces.nsIClipboard;

if (!clip) {

return false;

}

clip.setData(trans,null,clipid.kGlobalClipboard);

return true;

}

return false;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值