9.5.3 复选框和单选按钮菜单项
在文本旁标注复选框或单选按钮得到菜单项
复选框菜单项:
JCheckBoxMenuItem readonlyItem = new JCheckBoxMenuItem("Read-only");
optionsMenu.add(readonlyItem);
单选菜单项:
需要加入 ButtonGroup:
JRadioButtonMenuItem insertItem = new JRadioButtonMenuItem("Insert");
insertItem.setSelected(true);
group.add(insertItem);
optionsMenu.add(overtypeItem);
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Menuframe frame = new Menuframe();
frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class Menuframe extends Jframe implements ActionListener {
private JTextField text;
public Menuframe(){
setTitle("BorderTest");
setSize(450,450);
JMenuBar bar = new JMenuBar();
JMenu fileMenu = new JMenu("file");
JRadioButtonMenuItem copyItem = new JRadioButtonMenuItem("copy");
JRadioButtonMenuItem pasteItem = new JRadioButtonMenuItem("paste");
JRadioButtonMenuItem cutItem = new JRadioButtonMenuItem("cut");
fileMenu.add(copyItem);
fileMenu.add(pasteItem);
fileMenu.add(cutItem);
ButtonGroup group = new ButtonGroup();
group.add(copyItem);
group.add(pasteItem);
group.add(cutItem);
JMenu otherMenu = new JMenu("other");
JCheckBoxMenuItem nothingItem = new JCheckBoxMenuItem("nothing");
otherMenu.add(nothingItem);
fileMenu.add(otherMenu);
bar.add(fileMenu);
copyItem.addActionListener(this);
pasteItem.addActionListener(this);
cutItem.addActionListener(this);
nothingItem.addActionListener(this);
setJMenuBar(bar);
text = new JTextField();
text.setEditable(false);
add(text,BorderLayout.NORTH);
copyItem.doClick();
}
@Override
public void actionPerformed(ActionEvent e) {
text.setText(((JMenuItem)e.getSource()).getText());
}
}
9.5.4 弹出菜单
弹出菜单是不固定在菜单栏的菜单,和菜单栏菜单相比,它没有标题。
创建添加子菜单:
JPopupMenu popup = new JPopupMenu();
JMenuItem item = new JMenuItem("Cut");
popup.add(item);
默认显示弹出菜单方式:右键
点击组件显示弹出菜单:
Component.setComponentPopupMenu(popup);
JDK5 根据鼠标点击/释放事件,自动弹出菜单在指定位置:
if(popup.isPopupTrigger(event))
popup.show(event.getComponent(),event.getX(),event.getY());
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Main {
public static void main(String[] args) {
Main solution = new Main();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Menuframe frame = new Menuframe();
frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class Menuframe extends Jframe implements ActionListener {
private JTextField text;
public Menuframe(){
setTitle("BorderTest");
setSize(450,450);
JMenuBar bar = new JMenuBar();
JMenu fileMenu = new JMenu("file");
JRadioButtonMenuItem copyItem = new JRadioButtonMenuItem("copy");
JRadioButtonMenuItem pasteItem = new JRadioButtonMenuItem("paste");
JRadioButtonMenuItem cutItem = new JRadioButtonMenuItem("cut");
fileMenu.add(copyItem);
fileMenu.add(pasteItem);
fileMenu.add(cutItem);
ButtonGroup group = new ButtonGroup();
group.add(copyItem);
group.add(pasteItem);
group.add(cutItem);
JMenu otherMenu = new JMenu("other");
JCheckBoxMenuItem nothingItem = new JCheckBoxMenuItem("nothing");
otherMenu.add(nothingItem);
fileMenu.add(otherMenu);
bar.add(fileMenu);
copyItem.addActionListener(this);
pasteItem.addActionListener(this);
cutItem.addActionListener(this);
nothingItem.addActionListener(this);
setJMenuBar(bar);
text = new JTextField();
text.setEditable(false);
add(text,BorderLayout.NORTH);
copyItem.doClick();
JPopupMenu menu = new JPopupMenu();
menu.add(copyItem);
menu.add(pasteItem);
menu.add(cutItem);
menu.add(otherMenu);
text.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent event) {
menu.show(event.getComponent(),event.getX(),event.getY());
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
text.setText(((JMenuItem)e.getSource()).getText());
}
}
相关内容:选择 《Java核心技术 卷1》查找相关笔记
喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。
关注公众号,互相学习:钰娘娘知识汇总



