为什么我的复制剪切功能不能实现,请大家棒我修改下
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.*;
import java.io.*;
import javax.swing.JMenu;
import javax.swing.*;
import java.awt.*;
public class TestMenu
{
public static void main(String args[])
{
MyMenuFrame mf = new MyMenuFrame();
}
}
class MyMenuFrame extends Frame
{
MenuBar m_MenuBar;
Menu menuFile, menuEdit,menuFont;
MenuItem mi_File_Open,mi_File_Close,mi_File_Exit;
MenuItem mi_Edit_Cut, mi_Edit_Copy, mi_Edit_Paste,mi_Edit_Find,mi_Edit_All;
CheckboxMenuItem mi_Font_Style, mi_Font_Size;
TextArea ta;
FileDialog fd;
String str="";
String ta_Font_Name;
Clipboard clipboard = null;
BufferedReader br;
FileReader fr;
BufferedWriter bw;
FileWriter fw;
int ta_Font_Style,new_Style, ta_Font_Size,new_Size;
FileDialog fdialog= new FileDialog(this,"文件对话框",FileDialog.LOAD);
MyMenuFrame()
{
super("拥有菜单的窗口");
ta = new TextArea(5,30);
add(ta,BorderLayout.CENTER);
m_MenuBar = new MenuBar();
menuFile = new Menu("文件");
mi_File_Open = new MenuItem("打开");
mi_File_Open.setShortcut(new MenuShortcut(KeyEvent. VK_O));
mi_File_Close = new MenuItem("关闭");
mi_File_Exit = new MenuItem("退出");
mi_File_Open.addActionListener(new HandleActFile1(this));
mi_File_Close.addActionListener(new HandleAct());
mi_File_Exit.addActionListener(new HandleAct());
menuFile.add(mi_File_Open);
menuFile.add(mi_File_Close);
menuFile.addSeparator();
menuFile.add(mi_File_Exit);
m_MenuBar.add(menuFile);
menuEdit = new Menu("编辑");
mi_Edit_Cut = new MenuItem("剪切");
mi_Edit_Cut.setShortcut(new MenuShortcut(KeyEvent. VK_X));
mi_Edit_Copy = new MenuItem("复制");
mi_Edit_Copy.setShortcut(new MenuShortcut(KeyEvent. VK_C));
mi_Edit_Paste = new MenuItem("粘贴");
mi_Edit_Paste.setShortcut(new MenuShortcut(KeyEvent. VK_V));
mi_Edit_Find= new MenuItem("查找");
mi_Edit_Find.setShortcut(new MenuShortcut(KeyEvent. VK_F));
mi_Edit_All=new MenuItem("全选");
mi_Edit_All.setShortcut(new MenuShortcut(KeyEvent. VK_A));
mi_Edit_Cut.addActionListener(new HandleActFile1(this));
mi_Edit_Copy.addActionListener(new HandleActFile1(this));
mi_Edit_Paste.addActionListener(new HandleActFile1(this));
mi_Edit_Find.addActionListener(new HandleActFile1(this));
mi_Edit_All.addActionListener(new HandleAct6());
menuEdit.add(mi_Edit_Cut);
menuEdit.add(mi_Edit_Copy);
menuEdit.add(mi_Edit_Paste);
menuEdit.add(mi_Edit_Find);
menuEdit.add(mi_Edit_All);
m_MenuBar.add(menuEdit);
menuFont=new Menu("文字");
mi_Font_Style = new CheckboxMenuItem("粗体");
mi_Font_Size = new CheckboxMenuItem("大字体");
mi_Font_Style.addItemListener(new HandleItem1());
mi_Font_Size.addItemListener(new HandleItem2());
menuFont.add(mi_Font_Size);
menuFont.add(mi_Font_Style);
m_MenuBar.add(menuFont);
this.setMenuBar(m_MenuBar);
setSize(400,200);
setVisible(true);
ta_Font_Name = (ta.getFont()).getName();
ta_Font_Style = (ta.getFont()).getStyle();
new_Style = ta_Font_Style;
ta_Font_Size = (ta.getFont()).getSize();
new_Size = ta_Font_Size;
this.addWindowListener(new HandleWin());
}
class HandleAct implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Frame ff=new Frame();
ConfirmDlg confirm=new ConfirmDlg(ff);
if(e.getActionCommand()=="退出")
{
if(confirm.ans)
{
ff.dispose();
System.exit(0);
}
}
else
ta.setText("\n\n\n\t\t\t"+""+e.getActionCommand());
}
}
class HandleAct6 implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int end=ta.getText().length();
ta.setSelectionStart(0);
ta.setSelectionEnd(end);
}
}
class HandleItem1 implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
if(((CheckboxMenuItem)e.getSource()).getState())
{
new_Style = Font.BOLD;
ta.setFont(new Font(ta_Font_Name,new_Style,new_Size));
ta.setText("\n\n\n\t\t\t"+"你选择了粗体");
}
else
{
new_Style = ta_Font_Style;
ta.setFont(new Font(ta_Font_Name,new_Style,new_Size));
ta.setText("\n\n\n\t\t\t"+"你没有选择粗体");
}
}
}
class HandleItem2 implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
if (((CheckboxMenuItem)e.getSource()).getState())
{
new_Size = ta_Font_Size * 2;
ta.setFont(new Font(ta_Font_Name,new_Style,new_Size));
ta.setText("\n\n\n\t\t\t"+"你选择了大字体");
}
else
{
new_Size = ta_Font_Size;
ta.setFont(new Font(ta_Font_Name,new_Style,new_Size));
ta.setText("\n\n\n\t\t\t"+"你没有选择大字体");
}
}
}
class HandleClose extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
}
class HandleActFile implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand()=="打开")
{
fdialog.setSize(200,100);
fdialog.setVisible(true);
}
}
}
class HandleActFile1 implements ActionListener
{
Frame f;
HandleActFile1(Frame ff)
{
f=ff;
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand()=="打开")
{
ta.setText("");
fd=new FileDialog(f,"打开文件",FileDialog.LOAD);
fd.setDirectory("e:\\java作业");
fd.setVisible(true);
try{
File myfile=new File(fd.getDirectory(),fd.getFile());
BufferedReader raf= new BufferedReader(new FileReader(myfile));
String s = raf.readLine();
while(s!= null)
{
ta.append(s+"\n");
s = raf.readLine();
}
}
catch(IOException ioe)
{
System.err.println(ioe.toString());
}
}
if(e.getActionCommand()=="复制")
{
String temp = ta.getSelectedText();
StringSelection selectText = new StringSelection(temp);
clipboard.setContents(selectText, null);
}
if(e.getActionCommand()=="剪切")
{
String temp = ta.getSelectedText();
StringSelection selectText = new StringSelection(temp);
clipboard.setContents(selectText, null);
int start = ta.getSelectionStart();
int end = ta.getSelectionEnd();
ta.replaceRange("", start, end);
}
if(e.getActionCommand()=="粘贴")
{
Transferable content = clipboard.getContents(this);
DataFlavor flaver = DataFlavor.stringFlavor;
if (content.isDataFlavorSupported(flaver)) {
try {
String temp = (String) content.getTransferData(flaver);
ta.append(temp);
} catch (UnsupportedFlavorException ie) {
ie.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
}
}
}
}
}
class HandleWin extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{Frame f=(Frame)(e.getWindow());
ConfirmDlg confirm=new ConfirmDlg(f);
if(confirm.ans)
{
f.dispose();
System.exit(0);
}
}
}
class ConfirmDlg implements ActionListener
{
Dialog dlg;
Label message= new Label("是否关闭窗口");
Button btnY=new Button("是");
Button btnN=new Button("否");
Panel p1=new Panel();
Panel p2=new Panel();
boolean ans;
ConfirmDlg(Frame own)
{
btnY.addActionListener(this);
btnN.addActionListener(this);
dlg=new Dialog(own,"确认对话框",true);
p1.add(message);
p2.add(btnY);
p2.add(btnN);
dlg.add(p1,BorderLayout.NORTH);
dlg.add(p2,BorderLayout.SOUTH);
dlg.setSize(200,100);
dlg.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
dlg.dispose();
if(e.getActionCommand()=="是")
ans=true;
else
ans=false;
}
}
}
[解决办法]
jdk安装目录下 也有相关的源码
楼主可以抽空去看看