这段小程序点击菜单项怎么没有反应????

lgbupt 2009-09-13 01:13:13

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class XiTi7_4 {

public static void main(String args[]){
MenuWindow win=new MenuWindow("菜单示例");


}
}
class MenuWindow extends JFrame implements ActionListener,MouseMotionListener,MouseListener{
static String s1,s2,s3;
static int x1,x2,x3,x4;
static int flag;
Graphics g;
Graphics2D g2d=(Graphics2D)g;
JMenuBar menubar;
JMenu menu1,menu2,menu3;
JMenuItem item1,item2,item3;
private void addItem(JMenu menu,JMenuItem anItem,String menuName,int key,ActionListener listener)
{

anItem=new JMenuItem(menuName,key);
anItem.setActionCommand(menuName);
anItem.addActionListener(listener);
menu.add(anItem);
}
public MenuWindow(String s){

super(s);
this.setSize(300,300);
menubar=new JMenuBar();
menu1=new JMenu("选择颜色");
menu2=new JMenu("画笔粗细");
menu3=new JMenu("选择橡皮檫");

addItem(menu1,item1,"选择颜色",KeyEvent.VK_B,this);
addItem(menu2,item2,"画笔粗细",KeyEvent.VK_S,this);
addItem(menu3,item3,"选择橡皮檫",KeyEvent.VK_C,this);

menubar.add(menu1);
menubar.add(menu2);
menubar.add(menu3);

this.getContentPane().add(new ShapesPanel());
addMouseMotionListener(this);
addMouseListener(this);
setJMenuBar(menubar);
this.setVisible(true);
}
public void mousePressed(MouseEvent e){
x1=e.getX();
x2=e.getY();
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){
}
public void actionPerformed(ActionEvent e)
{if(e.getSource()==item1)
{
MyDialog m1=new MyDialog(this,"颜色");

Color mycolor=new Color(x1,x2,x3);
g2d.setColor(mycolor);

}
if(e.getSource()==item2)
{
MyDialog.text1.setEditable(true);
MyDialog.text2.setEditable(false);
MyDialog.text3.setEditable(false);
MyDialog m2=new MyDialog(this,"宽度");
s1=MyDialog.text1.getText();
x1=Integer.parseInt(s1);
BasicStroke ss=new BasicStroke(x1);
}
if(e.getSource()==item3)
{
flag=3;

}

}
public void mouseDragged(MouseEvent e)
{
if(flag==3)
{x3=e.getX();
x4=e.getY();
g.clearRect(x1,x2,x3,x4);
}

}
public void mouseMoved(MouseEvent e){}
}
class ShapesPanel extends JPanel{
ShapesPanel(){
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.fillRect(20,20,80,40);
}
}
class MyDialog extends JDialog implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JLabel title;
static JTextField text1,text2,text3;
JButton done;
MyDialog(JFrame F,String s){
super(F,s,true);
Container con=this.getContentPane();
title=new JLabel("输入"+s+"名称");
text1 =new JTextField(10);
text1.setEditable(true);
text2 =new JTextField(10);
text2.setEditable(true);
text3 =new JTextField(10);
text3.setEditable(true);
con.setLayout(new FlowLayout());
this.setSize(200,100);
setModal(false);
done=new JButton("确定");
done.addActionListener(this);
con.add(title);
con.add(text1);
con.add(text2);
con.add(text3);
con.add(done);
con.setVisible(true);
this.pack();
}
public void actionPerformed(ActionEvent e){
MenuWindow.s1=text1.getText();
MenuWindow.s2=text2.getText();
MenuWindow.s3=text3.getText();
MenuWindow.x1=Integer.parseInt(MenuWindow.s1);
MenuWindow.x2=Integer.parseInt(MenuWindow.s2);
MenuWindow.x3=Integer.parseInt(MenuWindow.s3);
if(MenuWindow.x1>=255)MenuWindow.x1=255;
if(MenuWindow.x2>=255)MenuWindow.x1=255;
if(MenuWindow.x3>=255)MenuWindow.x1=255;
}
}


...全文
133 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanglei031 2009-09-13
  • 打赏
  • 举报
回复
不过还是建议一个菜单定义一个action,分别注册,层次会清晰点。不要用e.getActionCommand() 来判断是点那个菜单触发的事件
yanglei031 2009-09-13
  • 打赏
  • 举报
回复
 //addMouseMotionListener(this);  
//addMouseListener(this);
监听器加在菜单项上
menu1.addMouseListener(this);
menu2.addMouseListener(this);
menu3.addMouseListener(this);

//if(e.getSource()==item1 )
if(e.getSource()==item1 )
if(e.getActionCommand() .equalsIgnoreCase("选择颜色"))

lixkyx 2009-09-13
  • 打赏
  • 举报
回复
楼主,你的item1,item2,item3这三个菜单项对象都只有声明,没有使用new创建对象啊!这样都是空对象,当然不能正常运行。
飞哥在线 2009-09-13
  • 打赏
  • 举报
回复
兄弟,你的item1之类的好像没有初始化。
e.getSource()得到的是一个对象。。。
用一个null去等于
能有反应么?
给分吧。。。。
呵呵
lgbupt 2009-09-13
  • 打赏
  • 举报
回复
楼上说的好像不行呀
windforcecn 2009-09-13
  • 打赏
  • 举报
回复
if(e.getSource()==item1

==改成equals

下面还有一个也改成这样
lgbupt 2009-09-13
  • 打赏
  • 举报
回复
能够运行,但是结果就是不对
Wendyyan 2009-09-13
  • 打赏
  • 举报
回复
完全看不懂

62,621

社区成员

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

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