awt的菜单组件
前面学了GUI界面的构建,其实就是把一些GUI的组件,按照一定的布局放在容器即可。在实际开发中,除了主界面,还有一类比较重要的内容就是菜单相关组件,可以通过菜单相关组件很方便的使用特定的功能,在AWT中,菜单组件的使用和之前学习的组件时一模一样的,只需要把菜单条、菜单、菜单项组合在一起,按照一定的布局,放入到容器中即可
常见菜单相关组件集成体系: MenuComponent类下面有两个子类,分别是MenuItem、MenuBar MenuItem类下面有两个子类,分别是CheckBoxMenuItem、Menu Menu类下面有一个子类,是PopupMenu类
上面介绍的类(也叫菜单组件)有什么用,看下面的功能描述
菜单组件名称 | 功能描述 |
---|---|
MenuBar | 菜单条,菜单的容器 |
Menu | 菜单组件,菜单项的容器。它也是MenuItem的子类,所以可作为菜单项使用 |
PopupMenu | 菜单项组件,即鼠标右键弹出来的 |
MenuItem | 菜单项组件 |
CheckboxMenuItem | 复选框菜单项组件 |
菜单相关组件的使用步骤:
1、准备菜单项组件,这些组件可以是MenuItem及子类对象
2、准备菜单组件Menu或者PopupMenu(PopupMenu也就是右击弹出的子菜单),把第一步中准备好的菜单项组件添加进来
3、准备菜单条组件MenuBar(MenuBar组件是用来承载多个Menu组件的),把第二步准备好的菜单组件Menu添加进来
4、把第三步中准备好的菜单条组件MenuBar添加到窗口对象中显示
小技巧:
1、如果要在某个菜单的菜单项之间添加分割线,那么只需要调用Menu的add(new MenuItem("-"))即可
2、如果要给某个菜单项关联快捷键功能,那么只需要在创建菜单项对象设置即可,例如给菜单项关联ctrl+shift+Q快捷键,只需要:new MenuItem("菜单项名字",new MenuShortcut(KeyEvent.VK_Q,true)
awt的菜单组件_练习
x
package ch29;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import static com.sun.java.accessibility.util.AWTEventMonitor.addWindowListener;
public class a_6_0awt_菜单组件_概述 {
//创建窗口
private Frame frame = new Frame("测试菜单相关组件");
//创建顶部菜单条
MenuBar menuBar = new MenuBar();
//创建菜单组件(什么是菜单,即点击了之后能展开一个小文本)
Menu fileMenu = new Menu("文件");
Menu editMenu = new Menu("编辑");
Menu formatMenu = new Menu("格式");
//菜单项组件(什么是菜单项,即小文本的的每一行内容)
MenuItem auto = new MenuItem("菜单换行");
MenuItem copy = new MenuItem("复制");
MenuItem paste = new MenuItem("粘贴");
//关联快捷键,下面的注释和取消注释也是菜单项组件,只不过是'格式'的菜单项组件
MenuItem comment = new MenuItem("注释", new MenuShortcut(KeyEvent.VK_Q, true));//关联快捷键
MenuItem cancelComment = new MenuItem("取消注释");
//主文本域,即窗口的文本域
TextArea ta = new TextArea(6, 40);
//组装视图
public void init() {
//写一个点击事件,当点击'注释'就会在ta这个文本域显示下面的语句。注意我们只对'注释'菜单项做了点击事件,所以只对'注释'有效
comment.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//在监听器下e.getActionCommand()点击后最后都返回注释功能
ta.append("您点击的菜单项是:" + e.getActionCommand() + "\n");//append是追加。我们前面几节课一直用的是setText
//什么那行的e.getActionCommand()得到的是事件发生的地方,即得到事件
}
});
//把'注释'菜单项和'取消注释'菜单项放到'格式'菜单里。注意:菜单条>菜单>菜单项。或理解为菜单里包含菜单项,菜单条里面包含菜单和菜单项
formatMenu.add(comment);
formatMenu.add(cancelComment);
//把'自动换行'、'复制'、'粘贴'共三个菜单项放到'编辑'菜单里面
editMenu.add(auto);
editMenu.add(copy);
editMenu.add(paste);
editMenu.add(formatMenu);
//把'文件'、'编辑'共两个菜单放到菜单条里面
menuBar.add(fileMenu);
menuBar.add(editMenu);
//把菜单条放入到Frame中
frame.setMenuBar(menuBar);//使用setMenuBar方法即可
frame.add(ta);
//设置frame最佳大小
frame.pack();
frame.setVisible(true);
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
}
public static void main(String[] args) {
new a_6_0awt_菜单组件_概述().init();
}
//为什么按钮里面的文字出现乱码:idea编码是UTF-8,生成的按钮是由当前win11操作系统创建的,而当前系统的默认编码是中文GBK编码,不一致就会出现乱码
//解决:让编码和解码一致
//具体解决:在idea软件的上方中间靠右一些有一个绿色锤子图标,点击锤子图标右边的输入框,点击下拉的Edit Configurations...,点击弹出来的
//选项卡的Modify options绿色字体,找到Add VM options并勾选,将'-Dfile.encoding=gbk'输入到刚才Modify options蓝色字体的
//下方的三条输入框中的最上面那条输入框里面
}
awt的菜单组件PopupMenu
通过PopupMenu组件来实现,思路如下:
1、创建PopupMenu菜单组件
2、创建多个MenuItem菜单项,并添加到PopupMenu中
3、将PopupMenu添加到目标组件中
4、为需要右击出现PopupMenu菜单的组件,注册鼠标监听事件,当监听到用户释放右键时,弹出菜单
awt的菜单组件PopupMenu_练习
xxxxxxxxxx
package ch29;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class a_6_1awt_菜单组件_PopupMenu {
private Frame frame = new Frame("测试PopupMenu组件");
//创建文本域
TextArea ta = new TextArea("我爱中华", 6, 40);
//创建Panel容器
Panel p = new Panel();
//创建PopupMenu
PopupMenu popupMenu = new PopupMenu();
//创建菜单项
MenuItem comment = new MenuItem("注释");
MenuItem cancalcomment = new MenuItem("取消注释");
MenuItem copy = new MenuItem("复制");
MenuItem save = new MenuItem("保存");
//组装视图
public void init() {
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
ta.append("您点击了右键:" + actionCommand + "\n");
}
};
//传入监听器
comment.addActionListener(listener);
cancalcomment.addActionListener(listener);
copy.addActionListener(listener);
save.addActionListener(listener);
//将功能放到popupMenu当中去
popupMenu.add(comment);
popupMenu.add(cancalcomment);
popupMenu.add(copy);
popupMenu.add(save);
//将popupMenu放到面板中Panel中去
p.add(popupMenu);
//设置Panel的大小
p.setPreferredSize(new Dimension(40, 100));
//给Panel注册鼠标事件,监听用户释放鼠标的动作,展示菜单
p.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
//isPopupTrigger()用来判断是否为鼠标右键点击
boolean flag = e.isPopupTrigger();
if (flag) {
//显示popupMenu
popupMenu.show(p, e.getX(), e.getY());
}
}
});
frame.add(ta);
frame.add(p, BorderLayout.SOUTH);
//设置frame最佳大小,并可视化
frame.pack();
frame.setVisible(true);
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
}
public static void main(String[] args) {
new a_6_1awt_菜单组件_PopupMenu().init();
}
}