void init(){ ……//创建菜单条mb …… // 在菜单条mb中添加两个菜单m1("文件")和m2("帮助") …… /* "文件"菜单m1中有菜单项:m11("打开"),菜单m3("编辑"),菜单项m12("退出")*/ …… // "帮助"菜单m2中有2个菜单项:m21("目录")、m22("关于") /* "编辑"子菜单m3 中有3个菜单项:m31("复制")m32("剪切")和m33("粘贴")*/ …… /* 允许菜单项m11("打开")引发一个事件,该事件的处理者为当前窗口 */ …… /* 允许菜单项m12("退出")引发一个事件,该事件的处理者为当前窗口 */ …… // 设置窗口f的菜单条为mb }
时间: 2023-07-08 20:44:57 浏览: 41
这段代码是用来创建一个带有菜单条的窗口,并设置菜单项的事件处理程序。具体的实现包括以下几个步骤:
1. 创建菜单条mb,并在其中添加两个菜单m1和m2。
2. 在m1菜单中添加菜单项m11、子菜单m3和菜单项m12。
3. 在m2菜单中添加菜单项m21和m22。
4. 在m3子菜单中添加菜单项m31、m32和m33。
5. 允许菜单项m11和m12引发事件,并将事件处理程序设置为当前窗口。
6. 将窗口f的菜单条设置为mb。
通过这些步骤,我们可以实现一个具有多层级菜单的窗口应用程序。
相关问题
java 语言完成void init(){ ……//创建菜单条mb …… // 在菜单条mb中添加两个菜单m1("文件")和m2("帮助") …… /* "文件"菜单m1中有菜单项:m11("打开"),菜单m3("编辑"),菜单项m12("退出")/ …… // "帮助"菜单m2中有2个菜单项:m21("目录")、m22("关于") / "编辑"子菜单m3 中有3个菜单项:m31("复制")m32("剪切")和m33("粘贴")/ …… / 允许菜单项m11("打开")引发一个事件,该事件的处理者为当前窗口 / …… / 允许菜单项m12("退出")引发一个事件,该事件的处理者为当前窗口 */ …… // 设置窗口f的菜单条为mb }
好的,这里是一个Java语言实现的示例代码:
```java
import javax.swing.*;
public class MenuDemo {
public void init() {
// 创建菜单条mb
JMenuBar mb = new JMenuBar();
// 在菜单条mb中添加两个菜单m1("文件")和m2("帮助")
JMenu m1 = new JMenu("文件");
JMenu m2 = new JMenu("帮助");
mb.add(m1);
mb.add(m2);
// "文件"菜单m1中有菜单项:m11("打开"),菜单m3("编辑"),菜单项m12("退出")
JMenuItem m11 = new JMenuItem("打开");
JMenu m3 = new JMenu("编辑");
JMenuItem m12 = new JMenuItem("退出");
m1.add(m11);
m1.add(m3);
m1.add(m12);
// "编辑"子菜单m3 中有3个菜单项:m31("复制")m32("剪切")和m33("粘贴")
JMenuItem m31 = new JMenuItem("复制");
JMenuItem m32 = new JMenuItem("剪切");
JMenuItem m33 = new JMenuItem("粘贴");
m3.add(m31);
m3.add(m32);
m3.add(m33);
// "帮助"菜单m2中有2个菜单项:m21("目录")、m22("关于")
JMenuItem m21 = new JMenuItem("目录");
JMenuItem m22 = new JMenuItem("关于");
m2.add(m21);
m2.add(m22);
// 允许菜单项m11("打开")引发一个事件,该事件的处理者为当前窗口
m11.addActionListener(e -> {
// 处理打开文件的逻辑
JOptionPane.showMessageDialog(null, "打开文件");
});
// 允许菜单项m12("退出")引发一个事件,该事件的处理者为当前窗口
m12.addActionListener(e -> {
// 处理退出程序的逻辑
System.exit(0);
});
// 创建一个窗口并设置菜单条为mb
JFrame f = new JFrame("菜单演示");
f.setJMenuBar(mb);
f.setSize(400, 300);
f.setVisible(true);
}
public static void main(String[] args) {
new MenuDemo().init();
}
}
```
这个程序创建了一个窗口,并在其中添加了一个菜单条。菜单条中包含两个菜单,分别是"文件"和"帮助"。"文件"菜单中包含菜单项"打开"、子菜单"编辑"和菜单项"退出","编辑"子菜单中包含菜单项"复制"、"剪切"和"粘贴","帮助"菜单中包含菜单项"目录"和"关于"。同时,程序还为"打开"和"退出"菜单项添加了事件处理程序。
使用STC89C52RC/LE52RC的LCD1602设计一个时钟
好的,设计一个时钟,需要用到STC89C52RC/LE52RC单片机、LCD1602液晶屏、电位器、晶振、电容、电阻等元器件。
电路连接如下:
![时钟电路连接图](https://img-blog.csdn.net/20171024153410451?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFpMzEyMjEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
代码如下:
```c
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS = P2^5; //RS引脚
sbit RW = P2^6; //RW引脚
sbit EN = P2^7; //EN引脚
uchar code table[] = "2019-02-15 00:00:00"; //初始时间
uchar time[20]; //存放时间的数组
uchar hour, minute, second; //时、分、秒
bit flag; //秒钟更新标志
void delay(uint t) //延时函数
{
uint i, j;
for(i = t; i > 0; i--)
{
for(j = 110; j > 0; j--)
{
_nop_();
}
}
}
void write_com(uchar com) //写命令函数
{
RS = 0;
RW = 0;
P0 = com;
EN = 1;
delay(5);
EN = 0;
}
void write_data(uchar dat) //写数据函数
{
RS = 1;
RW = 0;
P0 = dat;
EN = 1;
delay(5);
EN = 0;
}
void init() //LCD初始化函数
{
write_com(0x38); //设置显示模式:16*2、5*7点阵、8位数据接口
write_com(0x0c); //开启显示,不显示光标
write_com(0x06); //光标右移,不移动屏幕
write_com(0x01); //清屏
}
void get_time() //获取时间函数
{
uchar i;
for(i = 0; i < 20; i++)
{
time[i] = table[i];
}
hour = (time[11] - 48) * 10 + (time[12] - 48); //计算小时
minute = (time[14] - 48) * 10 + (time[15] - 48); //计算分钟
second = (time[17] - 48) * 10 + (time[18] - 48); //计算秒钟
}
void display_time() //显示时间函数
{
uchar h1, h2, m1, m2, s1, s2;
h1 = hour / 10;
h2 = hour % 10;
m1 = minute / 10;
m2 = minute % 10;
s1 = second / 10;
s2 = second % 10;
write_com(0x80); //显示位置:第一行第一列
write_data(h1 + 48); //显示小时的十位数
write_data(h2 + 48); //显示小时的个位数
write_data(':'); //显示冒号
write_data(m1 + 48); //显示分钟的十位数
write_data(m2 + 48); //显示分钟的个位数
write_data(':'); //显示冒号
write_data(s1 + 48); //显示秒钟的十位数
write_data(s2 + 48); //显示秒钟的个位数
}
void timer0() interrupt 1 //定时器0中断函数
{
TH0 = 0x3c;
TL0 = 0xb0;
flag = 1; //秒钟更新标志
}
void main()
{
TMOD = 0x01; //定时器0,模式1
TH0 = 0x3c; //定时器初值
TL0 = 0xb0;
TR0 = 1; //启动定时器0
ET0 = 1; //开启定时器0中断
EA = 1; //开启总中断
init(); //LCD初始化
get_time(); //获取时间
while(1)
{
if(flag) //一秒钟更新一次
{
flag = 0; //清除秒钟更新标志
second++; //秒钟加1
if(second == 60) //一分钟更新一次
{
second = 0; //秒钟清零
minute++; //分钟加1
if(minute == 60) //一小时更新一次
{
minute = 0; //分钟清零
hour++; //小时加1
if(hour == 24) //一天更新一次
{
hour = 0; //小时清零
}
}
}
display_time(); //显示时间
}
}
}
```
在此代码中,使用定时器0中断来更新时间,一秒钟更新一次。在更新时间时,需要注意进位的问题。最后,将更新后的时间显示在LCD上,实现一个简单的时钟程序。