package menu;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestMenu extends JFrame implements ActionListener,ItemListener{
MenuBar mb;
Menu m1;
Menu m2;
MenuItem mi1;
MenuItem mi2;
MenuItem mi3;
MenuItem mi4;
CheckboxMenuItem cbmi;//复选框菜单
static PopupMenu pm;//弹出式菜单
MenuItem pmi1,pmi2,pmi3;//弹出式菜单项
TextArea ta;
public TestMenu() {
mb = new MenuBar();
m1 = new Menu("颜色");
m2 = new Menu("窗口");
mi1 = new MenuItem("红色");
mi2 = new MenuItem("绿色");
mi3 = new MenuItem("蓝色");
mi4 = new MenuItem("关闭");
cbmi = new CheckboxMenuItem("斜体");
pm = new PopupMenu("弹出市菜单");
ta = new TextArea("弹出式菜单",10,30);
ta.setBounds(40,65,180,80);
this.add(ta);
mb.add(m1);
mb.add(m2);
m1.add(mi1);
m1.add(mi2);
m1.add(mi3);
m1.addSeparator();
m1.add(cbmi);
m2.add(mi4);
this.setMenuBar(mb);
pmi1 = new MenuItem("红色");
pmi2 = new MenuItem("绿色");
pmi3 = new MenuItem("蓝色");
pm.add(pmi1);pm.add(pmi2);pm.add(pmi3);
pmi1.addActionListener(this);
pmi2.addActionListener(this);
pmi3.addActionListener(this);
this.add(pm);
ta.addMouseListener(new MyMouseList());
mi1.addActionListener(this);
mi2.addActionListener(this);
mi3.addActionListener(this);
mi4.addActionListener(this);
cbmi.addActionListener(this);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setBounds(300,80,260,170);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
MenuItem mi = (MenuItem)e.getSource();
String miLab = mi.getLabel();
if(miLab == "红色") ta.setForeground(Color.red);
if(miLab == "蓝色") ta.setForeground(Color.blue);
if(miLab == "绿色") ta.setForeground(Color.green);
if(miLab == "关闭") {System.exit(0);}
this.setTitle("设置文字颜色为【"+miLab+"】");
}
public void itemStateChanged(ItemEvent e) {//处理复选框菜单项的方法
boolean yn =cbmi.getState();
if(yn) ta.setFont(new Font("楷体_GB2312",Font.ITALIC,15));
else ta.setFont(new Font("宋体",Font.PLAIN,15));
}
static class MyMouseList extends MouseAdapter{//处理鼠标事件类
public void mouseReleased(MouseEvent mce) { //鼠标释放式发生的事件
if(mce.isPopupTrigger()) { //判断鼠标师傅引发弹出菜单
pm.show((Component)mce.getSource(),mce.getX(), mce.getY());
//(Component)mce.getSource()得到弹出式菜单这个对象
}
}
}
public static void main(String[] args) {
new TestMenu();
}
}
第一个问题:设置斜体没有效果。
第二个问题:右键弹出菜单设置颜色后,有弹出不出不希望的东西,怎么解决?
----------------解决方案--------------------------------------------------------
1, 事件可能没有响应
2,有弹出不出不希望的东西, 是什么意思?
是弹不出你希望弹的东西还是弹出了你不希望弹的东西?
----------------解决方案--------------------------------------------------------
怎么修改让它响应啊
就是你在文本区点右键,设置颜色,马上有弹出了一个快捷菜单,我没有要它弹出快捷菜单啊
----------------解决方案--------------------------------------------------------
[CODE]import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestMenu extends JFrame implements ActionListener,ItemListener{
MenuBar mb;
Menu m1;
Menu m2;
MenuItem mi1;
MenuItem mi2;
MenuItem mi3;
MenuItem mi4;
CheckboxMenuItem cbmi;//复选框菜单
static PopupMenu pm;//弹出式菜单
MenuItem pmi1,pmi2,pmi3;//弹出式菜单项
JTextArea ta;
public TestMenu() {
mb = new MenuBar();
m1 = new Menu("颜色");
m2 = new Menu("窗口");
mi1 = new MenuItem("红色");
mi2 = new MenuItem("绿色");
mi3 = new MenuItem("蓝色");
mi4 = new MenuItem("关闭");
cbmi = new CheckboxMenuItem("斜体");
pm = new PopupMenu("弹出市菜单");
ta = new JTextArea("弹出式菜单",10,30);
ta.setBounds(40,65,180,80);
this.add(ta);
mb.add(m1);
mb.add(m2);
m1.add(mi1);
m1.add(mi2);
m1.add(mi3);
m1.addSeparator();
m1.add(cbmi);
m2.add(mi4);
this.setMenuBar(mb);
pmi1 = new MenuItem("红色");
pmi2 = new MenuItem("绿色");
pmi3 = new MenuItem("蓝色");
pm.add(pmi1);pm.add(pmi2);pm.add(pmi3);
pmi1.addActionListener(this);
pmi2.addActionListener(this);
pmi3.addActionListener(this);
this.add(pm);
ta.addMouseListener(new MyMouseList());
mi1.addActionListener(this);
mi2.addActionListener(this);
mi3.addActionListener(this);
mi4.addActionListener(this);
cbmi.addActionListener(this);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setBounds(300,80,260,170);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
MenuItem mi = (MenuItem)e.getSource();
String miLab = mi.getLabel();
if(miLab == "红色") ta.setForeground(Color.red);
if(miLab == "蓝色") ta.setForeground(Color.blue);
if(miLab == "绿色") ta.setForeground(Color.green);
if(miLab == "关闭") {System.exit(0);}
this.setTitle("设置文字颜色为【"+miLab+"】");
}
public void itemStateChanged(ItemEvent e) {//处理复选框菜单项的方法
boolean yn =cbmi.getState();
if(yn) ta.setFont(new Font("楷体_GB2312",Font.ITALIC,15));
else ta.setFont(new Font("宋体",Font.PLAIN,15));
}
static class MyMouseList extends MouseAdapter{//处理鼠标事件类
public void mouseReleased(MouseEvent mce) { //鼠标释放式发生的事件
if(mce.isPopupTrigger()) { //判断鼠标师傅引发弹出菜单
pm.show((Component)mce.getSource(),mce.getX(), mce.getY());
//(Component)mce.getSource()得到弹出式菜单这个对象
}
}
}
public static void main(String[] args) {
new TestMenu();
}
}[/CODE]
那是因为你用的TextArea,它是操作系统原生的组件,所以右键的菜单是WINDOWS帮你弹出的
当你使用了swing的组件以后,就不会发生这种事了
我只帮你改了一个,以后写界面的时候,最好都用javax.swing里面的组件,也就是带J字头的
最好不要去用awt里面的组件
----------------解决方案--------------------------------------------------------
谢谢指教!
----------------解决方案--------------------------------------------------------