//(1)引入项目所需要的包:package test;import java.awt.*;import java.awt.event.*;import javax.swing.*;//(2)构造图形界面,首先继承JFrame,声明界面组成部分的组件,关于界面的构造在MyPanel的构造方法中完成;//定义一个框架类,并实现动作事件和项目事件的监听器public class MyPanel extends JFrame implements ActionListener,ItemListener{//定义三个菜单项private JMenuItem jmiClear,jmiExit,jmiEraser;//定义三个单选按钮菜单项private JRadioButtonMenuItem jrbmiBlue,jrbmiYellow,jrbmiRed;Color c=new Color(255,0,0);int x,y;int con=3;int clear=0;MyPanel2 p1;//构造方法public MyPanel(){ this.setTitle("我的小小画板");//创建一个菜单栏JMenuBar jmb = new JMenuBar();//将菜单栏添加到框架上setJMenuBar(jmb);//创建两个菜单JMenu fileMenu = new JMenu("清除方式", false);JMenu OptionMenu = new JMenu("选择画笔", true);//将两个菜单添加到菜单栏上jmb.add(fileMenu);jmb.add(OptionMenu);//在"文件"菜单中添加菜单项fileMenu.add(jmiEraser=new JMenuItem("橡皮"));fileMenu.add(jmiClear = new JMenuItem("清除"));fileMenu.addSeparator();//在菜单中添加一条分隔线fileMenu.add(jmiExit = new JMenuItem("退出"));//创建子菜单,并添加到选项菜单中JMenu colorSubMenu=new JMenu("颜色");OptionMenu.add(colorSubMenu);colorSubMenu.add(jrbmiBlue=new JRadioButtonMenuItem("蓝色"));colorSubMenu.add(jrbmiYellow=new JRadioButtonMenuItem("绿色"));colorSubMenu.add(jrbmiRed=new JRadioButtonMenuItem("红色"));//为单选按钮菜单项分组ButtonGroup btg=new ButtonGroup();btg.add(jrbmiBlue);btg.add(jrbmiYellow);btg.add(jrbmiRed);p1=new MyPanel2();this.getContentPane().add(p1,BorderLayout.CENTER);jmiEraser.addActionListener(this);jmiClear.addActionListener(this);jmiExit.addActionListener(this);//为单选按钮菜单项注册项目事件的监听器jrbmiBlue.addItemListener(this);jrbmiYellow.addItemListener(this);jrbmiRed.addItemListener(this);}//(3)添加动作事件,在类MyPanel后面实现动作事件对应的接口implements ActionListener,在MyPanel中实现动作事件对应的方法actionPerformed(ActionEvent e),具体的实现如下:// 动作事件的事件处理方法public void actionPerformed(ActionEvent e){ Graphics g=getGraphics();if(e.getSource()==jmiEraser)c=getBackground();else if(e.getSource()==jmiClear)clear=1;else if(e.getSource()==jmiExit)System.exit(0);}//(4)添加动作事件,在类MyPanel后面实现项目事件对应的接口implements ItemListener,在MyPanel中实现动作事件对应的方法itemStateChanged(ItemEvent e),具体的实现如下://项目事件的事件处理方法public void itemStateChanged(ItemEvent e){if(e.getSource() instanceof JRadioButtonMenuItem){if(jrbmiBlue.isSelected())c=new Color(0,0,255);if(jrbmiYellow.isSelected())c=new Color(0,255,0);if(jrbmiRed.isSelected())c=new Color(255,0,0);}}(5)为添加鼠标事件,以内部类的形式实现鼠标事件对应的接口MouseMotionListener,并实现事件对应的方法,具体的实现如下:class MyPanel2 extends JPanel implements MouseMotionListener{public MyPanel2(){this.addMouseMotionListener(this);}//鼠标事件处理方法,当拖动鼠标时调用public void mouseDragged(MouseEvent e){//获取图形设备Graphics g=getGraphics();if (c==getBackground()){g.setColor(getBackground());g.fillOval(e.getX() - (20/2),e.getY() - (20/2), 20, 20);}else{g.setColor(c);//g.drawLine(lineStart.x, lineStart.y,e.getX(), e.getY());x=(int)e.getX();y=(int)e.getY();g.fillOval(x,y,con,con);//lineStart.move(e.getX(), e.getY());}if(clear==1){ g.clearRect(0,0,getSize().width,getSize().height);clear=0;}//释放图形设备g.dispose();}//鼠标事件处理方法,当移动鼠标时调用public void mouseMoved(MouseEvent e){}}//(6)在main方法中创建MyPanel,使其可见,设置关闭方法等。//main方法public static void main(String[] args){MyPanel frame = new MyPanel();frame.setSize(500,300);frame.setDefaultCloseOperation(3);frame.setVisible(true);}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。