自制记事本中PopupMenu为什么不能用?

my_caterpillar 2010-02-11 01:50:02
//package classes;

import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Documentation extends JFrame {
//test program ----begins
public static void main(String[] args) {
new Documentation();
}
//test program ----ends

public Documentation() {
super("It serves for saving documentations !");
try {
init();
} catch(Exception e) {
e.printStackTrace();
}
}
//state components -----begins
BorderLayout borderLayout = new BorderLayout();
JTextArea jTextArea = new JTextArea();
JScrollPane jScrollPane = new JScrollPane(jTextArea);
JMenuBar jMenuBar = new JMenuBar();
JPopupMenu jPopupMenu = new JPopupMenu();
JMenu jMenu1 = new JMenu();
JMenu jMenu2 = new JMenu();
JMenuItem jMenuItem1 = new JMenuItem();
JMenuItem jMenuItem2 = new JMenuItem();
JMenuItem jMenuItem3 = new JMenuItem();
JMenuItem jMenuItem4 = new JMenuItem();
JMenuItem jMenuItem5 = new JMenuItem();
JMenuItem jMenuItem6 = new JMenuItem();
JFileChooser jFileChooser = new JFileChooser(); //***
//state components ------ends

//initialize all ----begins
private void init() throws Exception{
this.getContentPane().setLayout(borderLayout);//set layout to be borderlayout

//add all the components to JFrame ---begins
jFileChooser.setPreferredSize(new Dimension(0,0));//?????????
this.getContentPane().add(jScrollPane,BorderLayout.CENTER);
this.getContentPane().add(jFileChooser,BorderLayout.SOUTH);
this.getContentPane().add(jPopupMenu); jTextArea.setText("");
jMenu1.setText("File");
jMenu2.setText("About");
jMenuItem1.setText("Open_Files");
// register monitor1 begins
jMenuItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jMenuItem1_Open(e);
}});
// register monitor1 ends
jMenuItem2.setText("Save_Files");
// register monitor2 begins
jMenuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jMenuItem2_Save(e);
}});
// register monitor2 ends
jMenuItem3.setText("Exit");
// register monitor3 begins
jMenuItem3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jMenuItem3_Exit(e);
}});
// register monitor3 ends
// register monitor4 begins
jMenuItem4.setText("Introduction");
jMenuItem4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jMenuItem4_Introduce(e);
}});
jMenuItem5.setText("New");
jMenuItem5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jTextArea.setText("");
}
});
jMenu1.add(jMenuItem5);
jMenu1.add(jMenuItem1);
jMenu1.add(jMenuItem2);
jMenu1.add(jMenuItem3);
jMenu2.add(jMenuItem4);
jPopupMenu.add(jMenuItem6);
jMenuBar.add(jMenu1);
jMenuBar.add(jMenu2);
this.setJMenuBar(jMenuBar);

//add all the components to JFrame ---ends

//closing
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}});
//closed
//right key
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
jPopupMenu_Clear(e);
}});

this.setBounds(100,100,600,500);
this.setVisible(true);

}
//initialize all ---ends
public void jMenuItem1_Open(ActionEvent e) {
try {
jFileChooser.setPreferredSize(new Dimension(400,300));//打开文件事件处理
//int value = jFileChooser.showOpenDialog(this);//显示打开文件对话框
jFileChooser.showOpenDialog(this);//显示打开文件对话框
//获取文件路径字符串
String myFileName = jFileChooser.getSelectedFile().getPath();

File file = new File(myFileName);
char[] outText = new char[(int)file.length()];
FileReader fr = new FileReader(file);
//int lengthh = fr.read(outText);
fr.read(outText);//读字符
String inText = new String(outText);
jTextArea.setText(inText);
fr.close();
} catch(IOException ex) {
ex.printStackTrace();
this.setTitle("文件不能打开");
} catch(NullPointerException npe) {
this.setTitle("没有选择文件");
}
}

public void jMenuItem2_Save(ActionEvent e) {
try {
jFileChooser.setPreferredSize(new Dimension(400,300));
jFileChooser.showSaveDialog(this);
String myFileName = jFileChooser.getSelectedFile().getPath();
File file = new File(myFileName);
//char[] oText = new char[(int)file.length()];
FileWriter fw = new FileWriter(file);
String oText = jTextArea.getText();
fw.write(oText);
fw.close();
this.setTitle(myFileName);
} catch(IOException ex) {
this.setTitle("文件不能保存");
} catch(NullPointerException npe) {
this.setTitle("没有选择文件");
}
}

public void jMenuItem3_Exit(ActionEvent e) {
System.exit(0);
}

public void jMenuItem4_Introduce(ActionEvent e) {
JDialog jDialog = new JDialog(this,"Introduction about my EditBook !");
JTextArea jta = new JTextArea();
jta.setText("author:caterpillar \n time:2010-2-11 0:56 \n chase:affect the world \n Come on forever !");
jta.setEditable(false);
jDialog.getContentPane().add(jta);
jDialog.setBounds(300,350,200,100);
jDialog.setVisible(true);
jDialog.setResizable(false);
}

public void jPopupMenu_Clear(MouseEvent e) {
if(e.getButton() == e.BUTTON3) {
jPopupMenu.show(this,e.getX(),e.getY());
jTextArea.setText("");
}
}
}
主要是红笔部分的错误!
...全文
193 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
my_caterpillar 2010-02-12
  • 打赏
  • 举报
回复
五楼的,谢啦!我会仔细看下你的代码的!
my_caterpillar 2010-02-12
  • 打赏
  • 举报
回复
回复6楼 恩,是的!不过,我现在已经找出症结所在了!不过仍然很感谢六楼同学的提醒!是这样的: JPopupMenu要添加在JTextArea里边,不能添在JFrame里边,JPopupMenu的弹出事件也应该添加在JTextArea里边,是这样的!
py330316117 2010-02-12
  • 打赏
  • 举报
回复
引用 2 楼 my_caterpillar 的回复:
谢谢,不过,Java API 上边说,凡是可以加JMenu的地方,都可以加JPopupMenu的,

你那个是5.0以后的api吗,我是在core java中看到这个地方的,上面说不能直接加到jframe中,不然显示不出来
cnew4 2010-02-12
  • 打赏
  • 举报
回复
ok.addActionListener(new ActionListener() {


public void actionPerformed(ActionEvent e) {
Font f1 = showField.getFont();
int style = f1.getStyle();
int size = Integer.parseInt((String) jb2.getSelectedItem());
Font f2 = new Font("宋体", style, size);
textArea.setFont(f2);
if ("下划线".equals((String) jb1.getSelectedItem())) {
HashMap<TextAttribute, Object> hm = new HashMap<TextAttribute, Object>();
hm.put(TextAttribute.UNDERLINE,TextAttribute.UNDERLINE_ON); // 定义是否有下划线
hm.put(TextAttribute.SIZE, size); // 定义字号
hm.put(TextAttribute.FAMILY, "宋体"); // 定义字体名
f2 = new Font(hm);

textArea.setFont(new Font(hm));
}
fontDialog.dispose();

}

});
//------------------------------------------------------------------------------------
cancel.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {
fontDialog.dispose();

}


});
//-------------------------------------------------------------------------------------
} else if("字体颜色".equals(id)){
color = JColorChooser.showDialog(NoteBook.this,"字体颜色设置",color);
textArea.setForeground(color);
} else if("系统 记事本".equals(id)){
String commond = "notepad.exe";
try {
Process child = Runtime.getRuntime().exec(commond);
} catch (Exception e1) { }
} else if("系统 计算器".equals(id)){
String commond = "calc.exe";
try {
Process child = Runtime.getRuntime().exec(commond);
} catch (Exception e1) { }
} else if("任务 管理器".equals(id)){
String commond = "taskmgr.exe";
try {
Process child = Runtime.getRuntime().exec(commond);
} catch (Exception e1) { }

}

}

};
/**
* 要退出记事本,有三种情况
* 一:文本内容不是空,且没有被保存过,这个时候应该弹出保存的对话框让用户保存,然后退出
* 二:文本内容不是空,被保存过,且保存之后内容发生了改变,这个时候直接把文本保存到原来的路径
* 三:文本内容是空,直接退出
*
*/
void exitNoteBook(){
String s2 = textArea.getText();
//文本内容发生改变,且没有被保存过
if (!s1.equals(s2) && file == null) {
JOptionPane op = new JOptionPane(null,
JOptionPane.QUESTION_MESSAGE);
int result = op.showConfirmDialog(null, "文件内容已经改变,是否要保存?");
if (result == op.YES_OPTION) {
saveDialog();
System.exit(1);
} else if (result == op.CANCEL_OPTION) {
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

} else if (result == op.NO_OPTION) {
System.exit(1);
}
//文本内容发生改变,曾经被保存过
} else if (!s1.equals(s2) && file != null) {
JOptionPane op = new JOptionPane(null,
JOptionPane.QUESTION_MESSAGE);
int result = op.showConfirmDialog(null, "文件内容已经改变,是否要保存?");
if (result == op.YES_OPTION) {
saveFile();
System.exit(1);
} else if (result == op.CANCEL_OPTION) {

} else if (result == op.NO_OPTION) {
System.exit(1);
}

} else {
System.exit(1);
}
}
//先弹出提示框,然后保存文件
void saveDialog(){
int returnVal = fileChooser.showSaveDialog(NoteBook.this);
if(returnVal == JFileChooser.APPROVE_OPTION){
file = fileChooser.getSelectedFile();
saveFile();
JOptionPane.showMessageDialog(null, "已经保存!");
}
}
/**
* 文件的保存
*/
void saveFile(){
try {
FileWriter fw = new FileWriter(file);
fw.write(textArea.getText());
fw.close();
} catch (IOException e) {

e.printStackTrace();
JOptionPane.showMessageDialog(null, "保存文件出错", "提示", JOptionPane.ERROR_MESSAGE);
}
}
/**
* 文件的打开
*/
void openFile(){
char[] buffer;
try {
FileReader fr = new FileReader(file);
int len = (int)file.length();
buffer = new char[len];
fr.read(buffer, 0, len);
fr.close();
textArea.setText(new String(buffer));

} catch (FileNotFoundException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}

}

public static void main(String[] args) {
new NoteBook();
System.gc();
}

}
cnew4 2010-02-12
  • 打赏
  • 举报
回复
} else if("替换".equals(id)){
final JDialog replaceDialog = new JDialog();
Container pane = replaceDialog.getContentPane();
replaceDialog.setVisible(true);
replaceDialog.setSize(320, 140);
replaceDialog.setLocation(360, 300);
replaceDialog.setAlwaysOnTop(true);
replaceDialog.setResizable(false);

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,1));

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JLabel jl1 = new JLabel("查找");
JLabel jl2 = new JLabel("替换");
final JTextField textField1 = new JTextField(15);
final JTextField textField2 = new JTextField(15);
JButton find = new JButton("查找 ");
JButton replace = new JButton("替换 ");
JButton allReplace = new JButton("全部替换");
JButton cancel = new JButton("取消");
panel1.add(jl1);panel1.add(textField1);
panel2.add(jl2);panel2.add(textField2);
panel3.add(find);panel3.add(replace);
panel3.add(allReplace);panel3.add(cancel);

panel.add(panel1);
panel.add(panel2);
panel.add(panel3);

pane.add(panel);
//----------------------------------注册查找事件
find.addActionListener(new ActionListener() {
int fromIndex = 0;

public void actionPerformed(ActionEvent e) {
String s = textField1.getText();
int index = textArea.getText().indexOf(s, fromIndex);
int length = s.length();

fromIndex = index + length;

if (index == -1) {
JOptionPane.showMessageDialog(replaceDialog, "没有找到你要找的内容",
"警告!", JOptionPane.ERROR_MESSAGE);
fromIndex = 0;



} else {
textArea.select(index, index + length);

}

}

});
//----------------------------------单个字符的替换
replace.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

if("".equals(textField1.getText())){
JOptionPane.showMessageDialog(replaceDialog, "替换内容失败!",
"警告!", JOptionPane.ERROR_MESSAGE);


} else {
textArea.replaceSelection(textField2.getText());
}
}
});
// ---------------------------------实现所有替换
allReplace.addActionListener(new ActionListener() {
int fromIndex = 0;
int index = 0;



public void actionPerformed(ActionEvent e) {
//文本框为空,则替换失败
if("".equals(textArea.getText()) || "".equals(textField1.getText())
|| "".equals(textField2.getText())){
JOptionPane.showMessageDialog(replaceDialog, "替换内容失败!",
"警告!", JOptionPane.ERROR_MESSAGE);
} else {
while (true) {
String s = textField1.getText();
index = textArea.getText().indexOf(s, fromIndex);


int length = s.length();
fromIndex = index + length;//更新查找的位置

if (index == -1 )
break;
textArea.replaceRange(textField2.getText(), index,
index + length);//把当前查找到的字符串替换掉

}
JOptionPane.showMessageDialog(replaceDialog, "全部替换完毕!");

}


}

});
//------------------------------------注册取消事件
cancel.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {
replaceDialog.dispose();

}



});

} else if("全选".equals(id)){
textArea.selectAll();
} else if("时间/日期".equals(id)){
Calendar cal = Calendar.getInstance();//获得系统当前时间
Formatter fmt = new Formatter();//设置时间显示格式
fmt.format("%tF %tT", cal,cal);
int position = textArea.getCaretPosition();//获取当前鼠标位置
textArea.insert(fmt.toString(), position); //插入到文本区域中
} else if("撤销".equals(id)){
try {
if(undo.canUndo() == true)//判断上一步操作是否是可以撤销的
undo.undo();
} catch (Exception e1) {

e1.printStackTrace();
}
} else if("自动换行".equals(id)){
if(jcbmi.getState()){
textArea.setLineWrap(true);
}else{
textArea.setLineWrap(false);
}

} else if("字体".equals(id)){
final JDialog fontDialog = new JDialog();
Container pane = fontDialog.getContentPane();
pane.setLayout(new GridLayout(3, 1));
fontDialog.setSize(210, 220);
fontDialog.setLocation(360, 300);
fontDialog.setVisible(true);
fontDialog.setTitle("设置字体");
fontDialog.setResizable(false);
fontDialog.setAlwaysOnTop(true);


JPanel panel1 = new JPanel();
JLabel label1 = new JLabel("字型", JLabel.RIGHT);
JLabel label2 = new JLabel("大小", JLabel.LEFT);
final JComboBox jb1 = new JComboBox();
final JComboBox jb2 = new JComboBox();

jb1.addItem("常规");
jb1.addItem("粗体");
jb1.addItem("斜体");
jb1.addItem("粗斜体");
jb1.addItem("下划线");
jb2.addItem("22");
jb2.addItem("8");
jb2.addItem("12");
jb2.addItem("16");
jb2.addItem("30");
jb2.addItem("40");
panel1.add(label1);
panel1.add(jb1);
panel1.add(label2);
panel1.add(jb2);

JPanel panel2 = new JPanel();
JButton ok = new JButton("确定");
JButton cancel = new JButton("取消");
panel2.add(ok);
panel2.add(cancel);

JPanel panel3 = new JPanel();
panel3.setLayout(new BorderLayout());
JLabel label3 = new JLabel("预览:");
String showStr = "记事本 !";
final JTextArea showField = new JTextArea(showStr);
showField.setFont(new Font("宋体",Font.BOLD,22));
showField.setEditable(false);
panel3.add(label3, BorderLayout.WEST);
panel3.add(showField, BorderLayout.CENTER);

pane.add(panel1);
pane.add(panel2);
pane.add(panel3);
//------------------------------------------------------------------------------------
jb1.addActionListener(new ActionListener() {


public void actionPerformed(ActionEvent e) {

int style = Font.BOLD;
String s1 = (String)jb1.getSelectedItem();
String s2 = (String)jb2.getSelectedItem();
int fontSize = Integer.parseInt(s2);
if("常规".equals(s1)){
style = Font.PLAIN;

} else if("粗体".equals(s1)){
style = Font.BOLD;
} else if("斜体".equals(s1)){
style = Font.ITALIC;
} else if("粗斜体".equals(s1)){
style = Font.BOLD + Font.ITALIC;
}
System.out.println(s2);
Font f = new Font("宋体",style,fontSize);
showField.setFont(f);
if("下划线".equals(s1)){
HashMap<TextAttribute, Object> hm = new HashMap<TextAttribute, Object>();
hm.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON); // 定义是否有下划线
hm.put(TextAttribute.SIZE, fontSize); // 定义字号
hm.put(TextAttribute.FAMILY, "宋体"); // 定义字体名
f = new Font(hm);
showField.setFont(f);
}

}

}

);
// ----------------------------------------------------------------------------------
jb2.addActionListener(new ActionListener() {


public void actionPerformed(ActionEvent e) {
int style = Font.BOLD;
String s1 = (String) jb1.getSelectedItem();
String s2 = (String) jb2.getSelectedItem();
int fontSize = Integer.parseInt(s2);
System.out.println(s2);
Font f = new Font("宋体", style, fontSize);
showField.setFont(f);
if ("下划线".equals(s1)) {
HashMap<TextAttribute, Object> hm = new HashMap<TextAttribute, Object>();
hm.put(TextAttribute.UNDERLINE,
TextAttribute.UNDERLINE_ON); // 定义是否有下划线
hm.put(TextAttribute.SIZE, fontSize); // 定义字号
hm.put(TextAttribute.FAMILY, "宋体"); // 定义字体名
f = new Font(hm);
showField.setFont(f);
}

}

}

);
cnew4 2010-02-12
  • 打赏
  • 举报
回复
贴个我以前写的记事本给你吧,呵呵

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.font.TextAttribute;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.Formatter;
import java.util.HashMap;

import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.undo.UndoManager;
/*
* @author admin
* @version 1.0
*/
public class NoteBook extends JFrame {

private static final long serialVersionUID = 1L;
/**textArea 文本区域*/
private JTextArea textArea = new JTextArea();
/**scroll 给文本区域增加的滚动条*/
private JScrollPane scroll;
/**menuBar 菜单条*/
private JMenuBar menuBar;
/**fileChooser 文件选择框*/
private JFileChooser fileChooser = new JFileChooser();

private File file = null;

private String s1 = textArea.getText();

private UndoManager undo = new UndoManager();
/**jcbmi 带选择的菜单子项*/
private JCheckBoxMenuItem jcbmi = new JCheckBoxMenuItem("自动换行", true);

private Color color = Color.black;

private JMenuItem statusBar = new JMenuItem("状态栏");
/**printerJob 打印机*/
private PrinterJob printerJob = PrinterJob.getPrinterJob();


//本类的构造函数
public NoteBook(){
super("记事本");
initTextPane();//初始化面板
initpopMenus();//初始化鼠标右键菜单
initMenu();//初始化标题栏菜单
//窗口注册退出事件
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
exitNoteBook();
}


});




}
/**
* 初始化面板
*/
void initTextPane(){
//构造带滚动条的文本区域
scroll = new JScrollPane(textArea);
add(scroll);



//设置文本区域能够自动换行
textArea.setLineWrap(true);
textArea.setFont(new Font("宋体",Font.BOLD,22));
textArea.getDocument().addUndoableEditListener(undo);//注册撤销事件
textArea.setForeground(Color.blue);//设置背景颜色



statusBar.setEnabled(false);//状态栏不可编辑
setSize(600, 600);

setLocation(230, 100);
setVisible(true);


}
JPopupMenu popupMenus = new JPopupMenu();//鼠标右键菜单
JMenuItem[] popupMenuitems = new JMenuItem[]{//鼠标右键菜单子项
new JMenuItem("撤销"),
new JMenuItem("--"),
new JMenuItem("剪切"),
new JMenuItem("复制"),
new JMenuItem("粘贴"),
new JMenuItem("删除"),
new JMenuItem("--"),
new JMenuItem("全选"),
};
/**
* 初始化鼠标右键菜单
*/
void initpopMenus(){
for(int i=0; i<popupMenuitems.length; i++){
if("--".equalsIgnoreCase(popupMenuitems[i].getText())){
popupMenus.addSeparator();//添加分割符
} else {
popupMenus.add(popupMenuitems[i]);
popupMenuitems[i].addActionListener(action);
}

}
textArea.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
int mods = e.getModifiers();
if((mods&InputEvent.BUTTON3_MASK) != 0){
popupMenus.show(e.getComponent(), e.getX(), e.getY());
}


}

}

);

}



JMenu[] menus = new JMenu[] { //构造菜单
new JMenu("文件"),
new JMenu("编辑"),
new JMenu("格式"),
new JMenu("查看"),
new JMenu("工具"),
new JMenu("帮助"),

};
JMenuItem[][] menuitems = new JMenuItem[][]{//添加菜单子项
{
new JMenuItem("新建"),
new JMenuItem("打开"),
new JMenuItem("保存"),
new JMenuItem("另存为"),
new JMenuItem("--"),
new JMenuItem("页面设置"),
new JMenuItem("打印"),
new JMenuItem("--"),
new JMenuItem("退出")

},
{
new JMenuItem("撤销"),
new JMenuItem("--"),
new JMenuItem("剪切"),
new JMenuItem("复制"),
new JMenuItem("粘贴"),
new JMenuItem("删除"),
new JMenuItem("--"),
new JMenuItem("查找"),
new JMenuItem("替换"),
new JMenuItem("--"),
new JMenuItem("全选"),
new JMenuItem("时间/日期")

},
{
jcbmi,
new JMenuItem("字体"),
new JMenuItem("字体颜色")


},
{
statusBar

},
{
new JMenuItem("系统 记事本"),
new JMenuItem("系统 计算器"),
new JMenuItem("任务 管理器")
},
{
new JMenuItem("关于"),
}

};
void initMenu() {//初始化菜单
menuBar = new JMenuBar();
for (int i = 0; i < menus.length; i++) {
menuBar.add(menus[i]);
for (int j = 0; j < menuitems[i].length; j++) {
if ("--".equalsIgnoreCase(menuitems[i][j].getText())) {
menus[i].addSeparator();//添加分隔符号
} else {
menus[i].add(menuitems[i][j]);
menuitems[i][j].addActionListener(action);
}
}
}

this.add(menuBar, BorderLayout.NORTH);
}
/**
* 事件处理,运用了内部类来完成时间的处理
*/
ActionListener action = new ActionListener(){


public void actionPerformed(ActionEvent e) {
JMenuItem mi = (JMenuItem)e.getSource();
String id = mi.getText();
if("新建".equals(id)){

String s2 = textArea.getText();
//如果文本内容被改变,且文件没有被保存过,则调用saveDialog()
if (!s1.equals(s2) && file == null) {
JOptionPane op = new JOptionPane(null,
JOptionPane.QUESTION_MESSAGE);
int result = op.showConfirmDialog(null, "文件内容已经改变,是否要保存?");
if (result == op.YES_OPTION) {
saveDialog();
textArea.setText("");
} else if (result == op.CANCEL_OPTION) {

} else if (result == op.NO_OPTION) {
textArea.setText("");
}
//如果文本内容被改变,且文件被保存过,则调用saveFile()
} else if (!s1.equals(s2) && file != null) {
JOptionPane op = new JOptionPane(null,
JOptionPane.QUESTION_MESSAGE);
int result = op.showConfirmDialog(null, "文件内容已经改变,是否要保存?");
if (result == op.YES_OPTION) {
saveFile();
textArea.setText("");
} else if (result == op.CANCEL_OPTION) {

} else if (result == op.NO_OPTION) {
textArea.setText("");
}
//如果文本内容没有被改变过,则刷新当前文本
} else {
textArea.setText("");
}
//调用openFile()
} else if ("打开".equals(id)) {
int returnVal = fileChooser.showOpenDialog(NoteBook.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fileChooser.getSelectedFile();
openFile();
}
//如果文件被保存过,调用saveFile();如果没有被保存过,则调用saveDialog()
} else if("保存".equals(id)){
if(file != null){
saveFile();
}else{
saveDialog();
}
//调用saveDialog()
} else if("另存为".equals(id)){

saveDialog();

} else if("页面设置".equals(id)){

printerJob.printDialog();


} else if("打印".equals(id)){
try {
printerJob.print();
} catch(Exception ew){
JOptionPane.showMessageDialog(NoteBook.this,"打印出错!","错误",JOptionPane.ERROR_MESSAGE);
}
}
//调用退出文本的方法
else if ("退出".equals(id)) {
exitNoteBook();

} else if("复制".equals(id)){
textArea.copy();
} else if("粘贴".equals(id)){
textArea.paste();
} else if("剪切".equals(id)){
textArea.cut();
} else if("删除".equals(id)){
textArea.replaceSelection("");
} else if ("查找".equals(id)) {

final JDialog findDialog = new JDialog();
Container pane = findDialog.getContentPane();
findDialog.setSize(310, 80);
findDialog.setLocation(360, 300);
findDialog.setVisible(true);
findDialog.setTitle("查找");
findDialog.setAlwaysOnTop(true);

JPanel panel = new JPanel();
final JTextField textField = new JTextField(10);
JButton next = new JButton("下一个");
JButton cancel = new JButton("取消 ");

panel.add(textField);
panel.add(next);
panel.add(cancel);

pane.add(panel);

//-------------------------------注册“下一个”按钮事件
next.addActionListener(new ActionListener() {
int fromIndex = 0;

public void actionPerformed(ActionEvent e) {

String s = textField.getText();//获取要查找的字符串
int index = textArea.getText().indexOf(s, fromIndex);//娶得要查找字符串在文本区域出现的位置
int length = s.length();

fromIndex = index + length;//更新查找的位置


if (index == -1) {
JOptionPane.showMessageDialog(findDialog, "没有找到你要找的内容",
"警告!", JOptionPane.ERROR_MESSAGE);
fromIndex = 0;
textArea.requestFocus();


} else {
textArea.select(index, index + length);//选中查找的内容
textArea.setSelectionColor(Color.green);//设置字体颜色

}

}

});
//------------------------------注册取消事件
cancel.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
findDialog.dispose();

}

}

);
my_caterpillar 2010-02-11
  • 打赏
  • 举报
回复
谢谢,不过,Java API 上边说,凡是可以加JMenu的地方,都可以加JPopupMenu的,
py330316117 2010-02-11
  • 打赏
  • 举报
回复
PopupMenu必须加在面板中,不能加在frame窗体中。你可以再frame中价格JPanel,然后在JPanel中加PopupMenu

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧