Java中的快捷键和右键属性添加实现

 

在做这个实验之前,先理顺一下这三者之间的关系:JMenuBar,JMenu,JMenuItem的关系

在一个窗口中,我们经常需要给窗口添加菜单条。在 Java 中这一部分是由三个类实现的,它们是JMenuBar、JMenu和JMenuItem,分别对应菜单条、菜单和菜单项。

同时,可以给JMenuItem注册侦听器,但不能对JMenuBar,JMenu注册侦听器.
.tH1~ o~}1J!Q1N0

一、菜单条(JMenuBar)

  JMenuBar 的构造方法是 JMenuBar(),相当简单。在构造之后,还要将它设置成窗口的菜单条,这里要用 setJMenuBar 方法:

  JMenuBar TestJMenuBar=new JMenuBar();

  TestFrame.setJMenuBar(TestJMenuBar);

  需要说明的是,JMenuBar 类根据 JMenu 添加的顺序从左到右显示,并建立整数索引。

二、菜单(JMenu)

  在添加完菜单条后,并不会显示任何菜单,所以还需要在菜单条中添加菜单。菜单 JMenu 类的构造方法有4种:

  • JMenu() 构造一个空菜单。

  • JMenu(Action a) 构造一个菜单,菜单属性由相应的动作来提供。

  • JMenu(String s) 用给定的标志构造一个菜单。

  • JMenu(String s,Boolean b) 用给定的标志构造一个菜单。如果布尔值为false,那么当释放鼠标按钮后,菜单项会消失;如果布尔值为true,那么当释放鼠标按钮后,菜单项仍将显示。这时的菜单称为 tearOff 菜单。

  在构造完后,使用 JMenuBar 类的 add 方法添加到菜单条中。

三、菜单项(JmenuItem)

  接下来的工作是往菜单中添加内容。 在菜单中可以添加不同的内容,可以是菜单项(JMenuItem),可以是一个子菜单,也可以是分隔符。

在构造完后,使用 JMenu 类的 add 方法添加到菜单中。

  子菜单的添加是直接将一个子菜单添加到母菜单中,而分隔符的添加只需要将分隔符作为菜单项添加到菜单中。


代码实现如下;

import java.awt.Color;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.PopupMenu;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JTextArea;

class ColorMenu extends JFrame implements ActionListener {
//定义菜单条
MenuBar MenuBar1;
//往菜单条上添加菜单
Menu Menu1;
//往菜单上添加菜单选项
MenuItem item1,item2,item3,item4,item5,item6,item7,item8;
//定义文本框
JTextArea ta;
//只要有菜单的地方都可以使用PopMenu.相当于是弹出菜单
PopupMenu popupMenu1;

public ColorMenu(){
  //定义了菜单条,往菜单条上添加了菜单
  MenuBar1=new MenuBar();
  Menu1=new Menu("这儿定义了菜单");
  setMenuBar(MenuBar1);
  MenuBar1.add(Menu1);

  //Ctrl+1.2.3.4代表的都是快捷键
  //item1.2.3.4代表的是菜单选项
  MenuShortcut shortcut1=new MenuShortcut(KeyEvent.VK_1);
  item1=new MenuItem("红色",shortcut1);
  MenuShortcut shortcut2=new MenuShortcut(KeyEvent.VK_2);
  item2=new MenuItem("绿色",shortcut2);
  MenuShortcut shortcut3=new MenuShortcut(KeyEvent.VK_3);
  item3=new MenuItem("蓝色",shortcut3);
  MenuShortcut shortcut4=new MenuShortcut(KeyEvent.VK_4);
  item4=new MenuItem("退出",shortcut4);
 
  //往菜单上添加菜单选项
  Menu1.add(item1);
  Menu1.add(item2);
  Menu1.add(item3);
  Menu1.addSeparator();//把分割线或者字符添加到此处
  Menu1.add(item4);
 
  //添加动作监听器,此菜单接受动作事件
  item1.addActionListener(this);
  item2.addActionListener(this);
  item3.addActionListener(this);
  item4.addActionListener(this);
 
  item5=new MenuItem("右键:红色");
  item6=new MenuItem("右键:绿色");
  item7=new MenuItem("右键:蓝色");
  item8=new MenuItem("右键:退出");
 
  //添加文本框
  ta=new JTextArea();
  add(ta);
 
  //对文本框添加右键弹出框
  popupMenu1=new PopupMenu();
  ta.add(popupMenu1);
  //文本框添加监听事件
  ta.addMouseListener(new MouseAdapter() {
   @Override
   public void mouseClicked(MouseEvent e) {
    if(e.getModifiers()==MouseEvent.BUTTON3_MASK){
     popupMenu1.show(ta, e.getX(), e.getY());
    }
  }

  });
  //对于右键弹出菜单添加菜单选项
  popupMenu1.add(item5);
  popupMenu1.add(item6);
  popupMenu1.add(item7);
  popupMenu1.addSeparator();
  popupMenu1.add(item8);
 
  //对于右键弹出菜单中的菜单选项添加事件监听
  item5.addActionListener(this);
  item6.addActionListener(this);
  item7.addActionListener(this);
  item8.addActionListener(this);
 
  setSize(230,200);
  setTitle("色彩与菜单");
  setVisible(true);
  //因为是抽象类,所以不能用new 实例化,可以用getDefaultToolkit返回Toolkit类的对象
  double scr_width=Toolkit.getDefaultToolkit().getScreenSize().getWidth();
  double scr_height=Toolkit.getDefaultToolkit().getScreenSize().getHeight();
  double x1=(scr_width-getWidth())/2;
  double y1=(scr_height-getHeight())/2;
  int x=new Double(x1).intValue();
  int y=new Double(y1).intValue();
  setLocation(x, y);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
}

/**
  * 因为对于各个菜单选项都定义了事件监听。所以this,单点击的时候,会自动的调用这个函数
  */
public void actionPerformed(ActionEvent e){
  if(e.getSource()==item1){
   ta.setBackground(Color.red);
  }
 
  if(e.getSource()==item2){
   ta.setBackground(Color.green);
  }
 
  if(e.getSource()==item3){
   ta.setBackground(Color.blue);
  }
 
  if(e.getSource()==item4){
   System.exit(0);
  }
  if(e.getSource()==item5){
   ta.setBackground(Color.PINK);
  }
 
  if(e.getSource()==item6){
   ta.setBackground(Color.gray);
  }
 
  if(e.getSource()==item7){
   ta.setBackground(Color.black);
  }
  if(e.getSource()==item8){
   System.exit(0);
  }
}



}

public class Kuaijie {
public static void main(String args[]){
  new ColorMenu();
}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值