发现java的Bug!

redjava 2004-12-26 06:51:04
发现JMenu有一些事件不能响应!
不能响应focusGained,mouseEntered等事件!但可以响应enuSelected,mouseMoved等事件!
欢迎大家讨论!
...全文
708 点赞 收藏 45
写回复
45 条回复
曹建峰-17年老猿 2005年02月24日
呵呵,补充呵两句JMenuItem 实现了FocusListener而且是private 的JMenu没有实现它,如果你想在JMenu里的FocusListener起作用可以继承一下JMenu
回复 点赞
liaowuyin 2005年02月06日
建议楼主看看类的源文件
回复 点赞
redjava 2005年01月19日
Jbuilder 6实例入门中有用JMenu 的focusGained事件来实现动态禁用JMenuItem的代码,发现没有
focusGained没有发生作用!
回复 点赞
cuilichen 2005年01月17日
问一下楼主,JMenu 的mouseEntered事件会存在吗?
“bug”不是那么好找的,虚心学习吧......
回复 点赞
cuilichen 2005年01月17日
是啊,初学者总能发现“bug”,真牛。
回复 点赞
jinjazz 2005年01月17日
一般初学者总能发现"bug",嘿嘿
回复 点赞
VincentSailing 2005年01月17日
呵呵,也是怀疑程序的问题。
不同的类的对象,要用不同的方法对待!
回复 点赞
bbn9435 2005年01月17日
ty
回复 点赞
htt80 2005年01月15日
讨论才能出结果啊!UP
回复 点赞
yzyronin 2005年01月14日
up
回复 点赞
redjava 2005年01月14日
请 mrwest(James West) 看清楚!
我是说的JMenu!
而你是用的JMenuItem!
这是两个不同的东西!
回复 点赞
lsrj 2005年01月13日
up!
回复 点赞
mrwest 2005年01月13日
import java.awt.event.*;

import javax.swing.*;

public class E_MenuBar extends JMenuBar implements ActionListener {
private ExamFrame owner;
private JMenu mnuFunction, mnuConfiguration, mnuHelp;
private JMenuItem miF_OpenEP, miF_StartExam, miF_SubmitEP, miF_Exit, miC_Configuration, miC_SetPassword,
miH_HelpC, miH_About;

public static E_ConfigDialog configDialog;

private ConfigPasswordDialog configPasswordDialog;
private SetCP setPasswordDialog;

public E_MenuBar(ExamFrame owner) {
this.owner = owner;
//*****************************************************************
mnuFunction = new JMenu("功能");
mnuConfiguration = new JMenu("配置");
mnuHelp = new JMenu("帮助");

miF_OpenEP = new JMenuItem("打开考卷...", new ImageIcon("openss.bic"));
miF_StartExam = new JMenuItem("开始考试", new ImageIcon("startss.bic"));
miF_SubmitEP = new JMenuItem("提交考卷", new ImageIcon("submitEPss.bic"));
miF_Exit = new JMenuItem("退出", new ImageIcon("exitss.bic"));

miC_Configuration = new JMenuItem("配置...", new ImageIcon("configss.bic"));
miC_SetPassword = new JMenuItem("设定管理密码...");

miH_HelpC = new JMenuItem("帮助主题", new ImageIcon("helpss.bic"));
miH_About = new JMenuItem("关于...");

configDialog = new E_ConfigDialog();
configPasswordDialog = new ConfigPasswordDialog(owner);
setPasswordDialog = new SetCP(owner, configPasswordDialog);
//*****************************************************************
miF_OpenEP.setToolTipText(ExamFrame.TTT_MB_LOAD_TQ);
miF_StartExam.setToolTipText(ExamFrame.TTT_START_EXAM);
miF_SubmitEP.setToolTipText(ExamFrame.TTT_SUBMIT_EXAMINATION_PAPER);
miF_Exit.setToolTipText(ExamFrame.TTT_MB_EXIT);
miC_Configuration.setToolTipText(ExamFrame.TTT_MB_CONFIG);
miC_SetPassword.setToolTipText(ExamFrame.TTT_MB_SET_PASSWORD);
miH_HelpC.setToolTipText(ExamFrame.TTT_MB_HELP_CONTENTS);
miH_About.setToolTipText(ExamFrame.TTT_MB_ABOUT);

miF_StartExam.setEnabled(false);
miF_SubmitEP.setEnabled(false);
//*****************************************************************
mnuFunction.add(miF_OpenEP);
mnuFunction.addSeparator();
mnuFunction.add(miF_StartExam);
mnuFunction.add(miF_SubmitEP);
mnuFunction.addSeparator();
mnuFunction.add(miF_Exit);

mnuConfiguration.add(miC_Configuration);
mnuConfiguration.addSeparator();
mnuConfiguration.add(miC_SetPassword);

mnuHelp.add(miH_HelpC);
mnuHelp.addSeparator();
mnuHelp.add(miH_About);

add(mnuFunction); add(mnuConfiguration); add(mnuHelp);
//*****************************************************************
miF_OpenEP.addActionListener(this);
miF_StartExam.addActionListener(this);
miF_SubmitEP.addActionListener(this);
miF_Exit.addActionListener(this);
miC_Configuration.addActionListener(this);
miC_SetPassword.addActionListener(this);
miH_HelpC.addActionListener(this);
miH_About.addActionListener(this);

miF_OpenEP.addMouseListener(new MouseProcessor());
miF_StartExam.addMouseListener(new MouseProcessor());
miF_SubmitEP.addMouseListener(new MouseProcessor());
miF_Exit.addMouseListener(new MouseProcessor());
miC_Configuration.addMouseListener(new MouseProcessor());
miC_SetPassword.addMouseListener(new MouseProcessor());
miH_HelpC.addMouseListener(new MouseProcessor());
miH_About.addMouseListener(new MouseProcessor());
}

public void setEPLoaded(boolean b) {
miF_StartExam.setEnabled(b);
miF_SubmitEP.setEnabled(!b);
}

public void setExamStarted(boolean b) {
miF_StartExam.setEnabled(!b);
miF_SubmitEP.setEnabled(b);
configDialog.setExamStarted(b);
}

public void setExamOver(boolean b) {
miF_StartExam.setEnabled(!b);
miF_SubmitEP.setEnabled(!b);
configDialog.setExamStarted(!b);
}

private class MouseProcessor extends MouseAdapter {
public void mouseEntered(MouseEvent e) {
if(e.getSource().equals(miF_OpenEP)) {
owner.setStatusBarText(ExamFrame.TTT_MB_LOAD_TQ);
} else if(e.getSource().equals(miF_StartExam)) {
owner.setStatusBarText(ExamFrame.TTT_START_EXAM);
} else if(e.getSource().equals(miF_SubmitEP)) {
owner.setStatusBarText(ExamFrame.TTT_SUBMIT_EXAMINATION_PAPER);
} else if(e.getSource().equals(miF_Exit)) {
owner.setStatusBarText(ExamFrame.TTT_MB_EXIT);
} else if(e.getSource().equals(miC_Configuration)) {
owner.setStatusBarText(ExamFrame.TTT_MB_CONFIG);
} else if(e.getSource().equals(miC_SetPassword)) {
owner.setStatusBarText(ExamFrame.TTT_MB_SET_PASSWORD);
} else if(e.getSource().equals(miH_HelpC)) {
owner.setStatusBarText(ExamFrame.TTT_MB_HELP_CONTENTS);
} else if(e.getSource().equals(miH_About)) {
owner.setStatusBarText(ExamFrame.TTT_MB_ABOUT);
}
}

public void mouseExited(MouseEvent e) {
owner.setStatusBarText("");
}
}

public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(miF_OpenEP)) {
owner.openEP();
} else if(e.getSource().equals(miF_StartExam)) {
owner.setExamStarted(true);
} else if(e.getSource().equals(miF_SubmitEP)) {
owner.setExamOver(true);
} else if(e.getSource().equals(miF_Exit)) {
System.exit(0);
} else if(e.getSource().equals(miC_Configuration)) {
configPasswordDialog.setVisible(true);
} else if(e.getSource().equals(miC_SetPassword)) {
setPasswordDialog.setVisible(true);
} else if(e.getSource().equals(miH_HelpC)) {
JOptionPane.showMessageDialog(new JButton("OK"), "制作中……,谢谢使用!");
} else if(e.getSource().equals(miH_About)) {
JOptionPane.showMessageDialog(new JButton("OK"), "模拟考试系统 模拟考试程序 " + ExamFrame.VERSION
+ "");
}
}
}

上上星期刚用到,绝对没问题。
回复 点赞
redjava 2005年01月12日
不能响应focusGained,mouseEntered等事件!
上面的是测试focusGained的,mouseEntered也试过,没响应!
回复 点赞
mrwest 2005年01月11日
这跟mouseEntered()有关么?
回复 点赞
redjava 2005年01月10日
上面是源代码!
void jMenuFile_focusGained(FocusEvent e) {
System.exit(0);
}
没有得到执行
回复 点赞
redjava 2005年01月09日
package javamediaplayer;

import javax.swing.UIManager;
import java.awt.*;
public class MediaApp {
boolean packFrame = false;

//Construct the application
public MediaApp() {
MediaFrame frame = new MediaFrame();
//Validate frames that have preset sizes
//Pack frames that have useful preferred size info, e.g. from their layout
if (packFrame) {
frame.pack();
}
else {
frame.validate();
}
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}

//Main method
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
new MediaApp();
}
}


package javamediaplayer;

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


public class MediaFrame extends JFrame {
JPanel contentPane;
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenuFile = new JMenu();
JMenuItem jMenuFileExit = new JMenuItem();
JMenu jMenuHelp = new JMenu();
JMenuItem jMenuHelpAbout = new JMenuItem();
JLabel statusBar = new JLabel();
BorderLayout borderLayout1 = new BorderLayout();

//Construct the frame
public MediaFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

//Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(400, 300));
this.setTitle("Frame Title");
statusBar.setText(" ");
jMenuFile.setText("File");
jMenuFile.addFocusListener(new MediaFrame_jMenuFile_focusAdapter(this));
jMenuFileExit.setText("Exit");
jMenuFileExit.addActionListener(new MediaFrame_jMenuFileExit_ActionAdapter(this));
jMenuHelp.setText("Help");
jMenuHelpAbout.setText("About");
jMenuHelpAbout.addActionListener(new MediaFrame_jMenuHelpAbout_ActionAdapter(this));
jMenuFile.add(jMenuFileExit);
jMenuHelp.add(jMenuHelpAbout);
jMenuBar1.add(jMenuFile);
jMenuBar1.add(jMenuHelp);
this.setJMenuBar(jMenuBar1);
contentPane.add(statusBar, BorderLayout.SOUTH);
}

//File | Exit action performed
public void jMenuFileExit_actionPerformed(ActionEvent e) {
System.exit(0);
}

//Help | About action performed
public void jMenuHelpAbout_actionPerformed(ActionEvent e) {
}

//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
jMenuFileExit_actionPerformed(null);
}
}

void jMenuFile_focusGained(FocusEvent e) {
System.exit(0);
}
}

class MediaFrame_jMenuFileExit_ActionAdapter implements ActionListener {
MediaFrame adaptee;

MediaFrame_jMenuFileExit_ActionAdapter(MediaFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuFileExit_actionPerformed(e);
}
}

class MediaFrame_jMenuHelpAbout_ActionAdapter implements ActionListener {
MediaFrame adaptee;

MediaFrame_jMenuHelpAbout_ActionAdapter(MediaFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuHelpAbout_actionPerformed(e);
}
}

class MediaFrame_jMenuFile_focusAdapter extends java.awt.event.FocusAdapter {
MediaFrame adaptee;

MediaFrame_jMenuFile_focusAdapter(MediaFrame adaptee) {
this.adaptee = adaptee;
}
public void focusGained(FocusEvent e) {
adaptee.jMenuFile_focusGained(e);
}
}
回复 点赞
yleiou 2005年01月05日
此BUG非彼BUG也

是非难辨
回复 点赞
ahooyn 2005年01月05日
我怀疑是类的定义和选取有问题
回复 点赞
mrwest 2005年01月05日
那不废话,我要是上个星期没用过,我闲着没事跟你叫什么真啊?说过了我上个星期刚刚用过了,前天看你帖子的时候我又把自己的代码翻出来验证了一下,真真的连个虫毛也没看到,上哪捉虫去?明明可以用,你偏要抬杠,你是不是没给Menu注册鼠标监听啊?
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告