已有101人关注
1.8添加菜单栏,单击菜单项无反应
发表在Java图书答疑 2019-04-07 《Java项目开发实战入门》第1章 一起来画画 44页-50页
是否精华
版块置顶:
package com.mr.draw;//类所在的包
import javax.swing.ButtonGroup;//No.5边界布局
import javax.swing.JButton;//No.5按钮类
import javax.swing.JFrame;//引用包:窗体类
import javax.swing.JToggleButton;//No.5按钮组
import javax.swing.JToolBar;//No.5工具栏
import javax.swing.JColorChooser;//No.7
import javax.swing.JMenu;//No.11
import javax.swing.JMenuBar;//No.11
import javax.swing.JMenuItem;//No.11
import java.awt.BorderLayout;//No.5
import java.awt.Color;//No.3颜色类
import java.awt.Graphics;//No.3绘图工具类
import java.awt.Graphics2D;//No.3绘图工具类
import java.awt.image.BufferedImage;//No.3缓冲图片类
import java.awt.event.MouseAdapter;//No.4鼠标实现类
import java.awt.event.MouseEvent;//No.4鼠标事件类
import java.awt.event.MouseMotionAdapter;//No.4移动监听类
import java.awt.geom.Ellipse2D;//No.9圆形
import java.awt.geom.Rectangle2D;//No.9方形
import java.awt.BasicStroke;//No.6画笔类
import java.awt.event.ActionEvent;//No.6动作事件
import java.awt.event.ActionListener;//No.6动作监听
/*自定义的*/
import com.mr.util.FrameGetShape;//No.9接口实现类
import com.mr.util.ShapeWindow;//No.9图形界面类
import com.mr.util.Shapes;//No.9图形类
import com.mr.util.DrawImageUtil;//No.10


/**
 *  画图主体
 * 
 * **/
public class DrawPictureFrame extends JFrame implements FrameGetShape{//继承窗体类//No.9接口


 BufferedImage image = new BufferedImage(570,390,BufferedImage.TYPE_3BYTE_BGR);//No.3
 Graphics gs = image.getGraphics();//No.3 获的图像的绘图对象
 Graphics2D g = (Graphics2D)gs;//No.3 将绘图对象转换为Graphics2D类型
 DrawPictureCanvas canvas = new DrawPictureCanvas();//No.3 创建画布对象
 Color foreColor = Color.BLACK;//No.3定义前景色
 Color backgroundColor = Color.WHITE;//No.3定义背景色
 int x =-1;//No.4 上次鼠标绘制点的横坐标
 int y =-1;//No.4 上次鼠标绘制点的纵坐标
 boolean rubber = false ;//No.4 橡皮擦标识变量
 private JToolBar toolbar;//No.5工具栏
 private JButton eraserButton;//No.5橡皮按钮
 private JToggleButton strokeButton1;//No.5细线按钮
 private JToggleButton strokeButton2;//No.5粗线按钮
 private JToggleButton strokeButton3;//No.5较粗线按钮
 private JButton backgroundButton;//No.5背景按钮
 private JButton foregroundButton;//No.5前景按钮
 private JButton clearButton;//No.5清除按钮
 private JButton saveButton;//No.5保存按钮
 private JButton shapeButton;//No.5图形按钮
 boolean drawShape = false;//No.9
 Shapes shape;//No.9
 
 private JMenuItem strokeMenuItem1;//No.10
 private JMenuItem strokeMenuItem2;//No.10
 private JMenuItem strokeMenuItem3;//No.10
 private JMenuItem clearMenuItem;//No.10
 private JMenuItem foregeroundMenuItem;//No.10
 private JMenuItem backgroundMenuItem;//No.10
 private JMenuItem eraserMenuItem;//No.10
 private JMenuItem exitMenuItem;//No.10
 private JMenuItem saveMenuItem;//No.10
 /**
  * 构造方法
  * No.3添加组件的初始化方法
  * No.4添加组件监听
  * */
 public DrawPictureFrame() {
  setResizable(false);//No.3窗体不能改变大小
  setTitle("画图程序");//No.3设置标题
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//No.3窗体关闭则停止程序
  setBounds(500,100,574,460);//No.3设置窗体位置和高宽
  init();//No.3组件初始化
  addListener();//No.4 添加组件监听
  
 }
 /**
  * @函数名:init
  * @功能:组件初始化
  * @category:私有的
  * @param:无
  * @return:无
  * */
 private void init() {
  g.setColor(backgroundColor);//No.3用背景设置绘图对象的颜色
  g.fillRect(0, 0, 570, 390);//No.3用背景色填充整个画布
  g.setColor(foreColor);//No.3用前景色设置绘图对象的颜色
  canvas.setImage(image);//No.3设置画布的图像
  getContentPane().add(canvas);//No.3将画布添加到窗体容器默认布局的中部位置
  JToolBar toolBar = new JToolBar();//No.5初始化工具栏
  getContentPane().add(toolBar, BorderLayout.NORTH);//No.5工具栏添加到窗体最北位置
  saveButton = new JButton("保存");//No.5初始化按钮对象,并添加文本内容
  toolBar.add(saveButton);//No.5工具栏添加按钮
  toolBar.addSeparator();//No.5添加分割条
  
  strokeButton1 =new JToggleButton("细线");//No.5初始化按钮对象,并添加文本内容
  strokeButton2 =new JToggleButton("粗线");//No.5
  strokeButton3 =new JToggleButton("较粗");//No.5
  strokeButton1.setSelected(true);//No.5细线处于被选中状态
  toolBar.add(strokeButton1);//No.5工具栏添加按钮
  toolBar.add(strokeButton2);//No.5
  toolBar.add(strokeButton3);//No.5
  ButtonGroup strokeGroup = new ButtonGroup();//No.5
  //NO.5画笔粗细按钮组,保证同时只有一个按钮被选中
  strokeGroup.add(strokeButton1);//No.5按钮组件添加按钮
  strokeGroup.add(strokeButton2);//No.5
  strokeGroup.add(strokeButton3);//No.5
  toolBar.addSeparator();//No.5添加分割条
  
  backgroundButton = new JButton("背景颜色");//No.5初始化按钮对象,并添加文本内容
  foregroundButton = new JButton("前景颜色");//No.5
  toolBar.add(backgroundButton);//No.5工具栏添加按钮
  toolBar.add(foregroundButton);//No.5
  toolBar.addSeparator();//No.5添加分割条
  
  shapeButton =new JButton("图形");//No.9初始化按钮对象,并添加文本内容
  toolBar.add(shapeButton);//No.9工具栏添加按钮
  
  clearButton =new JButton("清除");//No.5初始化按钮对象,并添加文本内容
  eraserButton = new JButton("橡皮");//No.5
  toolBar.add(clearButton);//No.5工具栏添加按钮
  toolBar.add(eraserButton);//No.5
  
  JMenuBar menuBar = new JMenuBar();//No.11创建菜单栏
  setJMenuBar(menuBar);//No.11窗体载入菜单栏
  
  JMenu systeMenu =  new JMenu("系统");//No.11初始化菜单栏对象,并添加文本内容
  menuBar.add(systeMenu);//No.11菜单栏添加菜单对象
  saveMenuItem = new JMenu("保存");//No.11初始化菜单项对象,并添加文本内容
  exitMenuItem= new JMenu("退出");//No.11
  systeMenu.add(saveMenuItem);//No.11菜单添加菜单项
  systeMenu.addSeparator();//No.11添加分隔符
  systeMenu.add(exitMenuItem);//No.11
  
  JMenu strokeMenu =  new JMenu("线型");//No.11初始化菜单栏对象,并添加文本内容
  menuBar.add(strokeMenu);//No.11菜单栏添加菜单对象
  strokeMenuItem1= new JMenu("细线");//No.11初始化菜单项对象,并添加文本内容
  strokeMenuItem2= new JMenu("粗线");//No.11
  strokeMenuItem3= new JMenu("较粗线");//No.11
  strokeMenu.add(strokeMenuItem1);//No.11菜单添加菜单项
  strokeMenu.add(strokeMenuItem2);//No.11
  strokeMenu.add(strokeMenuItem3);//No.11
  
  JMenu colorMenu =  new JMenu("颜色");//No.11初始化菜单栏对象,并添加文本内容
  menuBar.add(colorMenu);//No.11菜单栏添加菜单对象
  foregeroundMenuItem= new JMenu("前景色");//No.11初始化菜单项对象,并添加文本内容
  backgroundMenuItem= new JMenu("背景色");//No.11
  colorMenu.add(foregeroundMenuItem);//No.11菜单添加菜单项
  colorMenu.add(backgroundMenuItem);//No.11
  
  JMenu editMenu =  new JMenu("编辑");//No.11初始化菜单栏对象,并添加文本内容
  menuBar.add(editMenu);//No.11菜单栏添加菜单对象
  eraserMenuItem= new JMenu("橡皮");//No.11初始化菜单项对象,并添加文本内容
  clearMenuItem= new JMenu("清除");//No.11
  editMenu.add(eraserMenuItem);//No.11
  editMenu.add(clearMenuItem);//No.11
  
 }
 /**
  * @函数名:addListener
  * @功能:添加监听动作
  * @category:私有的
  * @param:无
  * @return:无
  * */
 private void addListener() {
  

  saveMenuItem.addActionListener(new ActionListener(){//No.12菜单栏系统项保存按钮
   public void actionPerformed( ActionEvent e) {//No.12
    DrawImageUtil.saveImage(DrawPictureFrame.this, image);//No.12打印图片
   }
  });  
 }
 /**
  * main函数
  * */
 public static void main(String[] args) {
  DrawPictureFrame frame =new DrawPictureFrame();//No.3 创建窗体对象
  frame.setVisible(true);//No.3 让窗体可见
  
 }
 /**
  * @函数名:getShape
  * @功能:FrameGetshape接口实现类,
  *     用于获取图形空间返回的被选中的图形
  * @category:公有的
  * @param:shape
  * @return:无
  * */
 public void getShape(Shapes shape) {
  this.shape = shape ;//No.9 将返回的图形对象赋给类的全局变量
  drawShape =true;//No.9 画图形标识变量为true, 说明现在鼠标画的是图形,而不是线条
  
 }
}

跟书上一样的代码为什么运行后单击菜单项无反应

分享到:
精彩评论 3
linjunwei
学分:4 LV1
linjunwei
学分:4 LV1
2019-04-07
板凳

是我没有添加什么组件吗??还是eclipse的问题??

根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2019-04-08
地板

代码比较器ExamDiff.rar

推荐你一个代码比较器程序,把你写的代码与光盘源码比较一下,看一下哪里不一样

首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照