关于java中菜单事件的监听问题,求各位大神!

我的目的是鼠标点击菜单中的不同等级,窗口中产生的按钮数不同,比如点击了初级,那生成的就是有10x10的按钮数的窗口,点击了中级,就生成有15x15按钮数的窗口,可我的程序... 我的目的是鼠标点击菜单中的不同等级,窗口中产生的按钮数不同,比如点击了初级,那生成的就是有10x10的按钮数的窗口,点击了中级,就生成有15x15按钮数的窗口,可我的程序好像不执行我设的事件监听,总是生成初始化时5x5的按钮数窗口,求大神们帮我改一下。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MenuEvent extends JFrame{
private JMenuBar aaa;
private JMenu bbb;
private JPanel panel;
private JButton buttons[][];
int a=5,b=5;
Container c = getContentPane();

public MenuEvent() {
aaa = new JMenuBar();
this.setJMenuBar(aaa);
bbb = new JMenu("选项");
aaa.add(bbb);
JMenuItem ccc = new JMenuItem("初级");
JMenuItem ddd = new JMenuItem("中级");
JMenuItem eee = new JMenuItem("高级");
ccc.addMouseListener(new MouseAdapter() {
public void mouseClicked(ActionEvent e) {
a=10;
b=10;
}
});
bbb.add(ccc);
bbb.addSeparator();
ddd.addMouseListener(new MouseAdapter() {
public void mouseClicked() {
a=15;
b=15;
}
});
bbb.add(ddd);
bbb.addSeparator();
eee.addMouseListener(new MouseAdapter() {
public void mouseClicked() {
a=20;
b=20;
}
});
bbb.add(eee);
buttons=new JButton[a][b];
panel=new JPanel();
panel.setLayout(new GridLayout(a,b,2,2));
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
buttons[i][j]=new JButton();
panel.add(buttons[i][j]);
}
}
c.add(panel,BorderLayout.CENTER);
setSize(500,500);
setVisible(true);
}
public static void main(String[] args) {
MenuEvent m = new MenuEvent();
}
}
展开
 我来答
fuhaiwei
2014-10-04 · TA获得超过3409个赞
知道大有可为答主
回答量:974
采纳率:75%
帮助的人:1388万
展开全部

有些错误,主要是事件选择错误,和事件里面没有重新创建Button。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MenuEvent extends JFrame {
private JPanel panel;
public MenuEvent() {
JMenuBar jMenuBar = new JMenuBar();
JMenu jMenu = new JMenu("选项");
JMenuItem item1 = new JMenuItem("初级");
JMenuItem item2 = new JMenuItem("中级");
JMenuItem item3 = new JMenuItem("高级");
jMenu.add(item1);
jMenu.addSeparator();
jMenu.add(item2);
jMenu.addSeparator();
jMenu.add(item3);
jMenuBar.add(jMenu);
this.setJMenuBar(jMenuBar);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(500, 500);
item1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
initButtons(10, 10);
}
});
item2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
initButtons(15, 15);
}
});
item3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
initButtons(20, 20);
}
});
item1.doClick();
}

private void initButtons(int rows, int cols) {
if (panel != null) {
this.remove(panel);
}
panel = new JPanel();
panel.setLayout(new GridLayout(rows, cols, 2, 2));
for (int i = 0; i < rows * cols; i++) {
panel.add(new JButton());
}
this.add(panel, BorderLayout.CENTER);
this.setVisible(true);
}

public static void main(String[] args) {
new MenuEvent();
}
}
追问
item1.doClick();这个是什么意思啊?为什么只有item1引用了doClick(),那要是点击item2和Item3呢?谢谢您。
追答
item1.doClick();意思就是模拟点击一下菜单1,以免程序刚启动的时候,没有任何按钮,空白一片不好看。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式