首页上一页 1 下一页尾页 3 条记录 1/1页
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, 说明现在鼠标画的是图形,而不是线条 } }
跟书上一样的代码为什么运行后单击菜单项无反应