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

购物车
发表新帖
立即签到








