——1、菜单组件
相关对象:
MenuBar 菜单条
Menu 菜单容器
PopupMenu 上下文菜单(右键弹出菜单组件)
MenuItem 菜单项
CheckboxMenuItem 复选框菜单项
小技巧:
1、添加这样的菜单项分割线可以直接调用add(new MenuItem("-"))实现
2、给某一个菜单项绑定快捷键,调用 new MenuItem("菜单项名称",new MenuShortcut(KeyEvent.枚举按键值,true))
案例:
package cn.dzz;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main {
public static void main(String[] args) {
// 创建窗体
Frame frame = new Frame();
// 先把界面需要的组件创建出来
MenuBar menuBar = new MenuBar();
Menu fileMenu = new Menu("file");
Menu editMenu = new Menu("edit");
// 格式菜单嵌入在编辑菜单对象中
Menu formatMenu = new Menu("Format");
// 菜单项
MenuItem autoNextLineMenuItem = new MenuItem("autoNextLine");
MenuItem copyMenuItem = new MenuItem("copy");
MenuItem pasteMenuItem = new MenuItem("paste");
MenuItem commentMenuItem = new MenuItem("comment Ctrl + Shift + Q");
MenuItem cancelCommentMenuItem = new MenuItem("comment cancel");
// 别漏了文本编辑区
TextArea textArea = new TextArea(6,40);
// 事件交互处理
commentMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.append("您点击了菜单项:" + e.getActionCommand());
}
});
// 先从小的组件开始组装到一起
// 格式菜单装上注释和取消注释
formatMenu.add(commentMenuItem);
formatMenu.add(cancelCommentMenuItem);
// 再组装编辑菜单
editMenu.add(autoNextLineMenuItem);
editMenu.add(copyMenuItem);
editMenu.add(pasteMenuItem);
editMenu.add(new MenuItem("-")); // 菜单分割线
editMenu.add(formatMenu);
// 再是菜单条添加菜单对象
menuBar.add(fileMenu);
menuBar.add(editMenu);
// 总体布局确定
frame.setMenuBar(menuBar);
frame.add(textArea);
frame.pack();
frame.setVisible(true);
}
}
效果还不错:
设置的菜单:
多点击几次之后发现没有换行,需要加上\n换行字符
textArea.append("您点击了菜单项:" + e.getActionCommand() + "\n");
弹出式菜单对象 PopupMenu
案例:
packagecn.dzz;import javax.swing.*;import java.awt.*;import java.awt.event.*;public classMain {public static voidmain(String[] args) {//创建窗体
Frame frame = newFrame();//先创建组件,之后进行布局设置
TextArea textArea = new TextArea("demo text 文本内容",6, 40);
Panel panel= newPanel();
panel.setPreferredSize(new Dimension(400,300)); //大小
PopupMenu popupMenu = new PopupMenu(); //右键菜单
MenuItem commentMenuItem= new MenuItem("comment");
MenuItem cancelCommentMenuItem= new MenuItem("cancelComment");
MenuItem copyMenuItem= new MenuItem("copy");
MenuItem saveMenuItem= new MenuItem("save");//布局组装
popupMenu.add(commentMenuItem);
popupMenu.add(cancelCommentMenuItem);
popupMenu.add(saveMenuItem);
popupMenu.add(copyMenuItem);
panel.add(popupMenu);
Box verticalBox=Box.createVerticalBox();
verticalBox.add(textArea);
verticalBox.add(panel);
frame.add(verticalBox, BorderLayout.CENTER);//事件监听设置
ActionListener actionListener = newActionListener() {
@Overridepublic voidactionPerformed(ActionEvent e) {
String actionCommand=e.getActionCommand();
textArea.append("\n您右键菜单选择的是:" +actionCommand);
}
};
commentMenuItem.addActionListener(actionListener);
cancelCommentMenuItem.addActionListener(actionListener);
copyMenuItem.addActionListener(actionListener);
saveMenuItem.addActionListener(actionListener);//鼠标右键监听设置
panel.addMouseListener(newMouseAdapter() {
@Overridepublic voidmouseReleased(MouseEvent e) {//super.mouseReleased(e);
boolean popupTrigger =e.isPopupTrigger();if(popupTrigger) {//参数1 所属的父组件对象,
popupMenu.show(panel, e.getX(), e.getY());
}
}
});
frame.pack();
frame.setVisible(true);
}
}
效果: