事件
void keyPressed(KeyEvent e)
void keyReleased(KeyEvent e)
释放某个键时调用此方法。
void keyTyped(KeyEvent e)
键入某个键时调用此方法。
有点没看明白。。。。菜单的事件监听和按钮是一样的,按钮怎么写菜单项就怎么写。
另外我看第一个截图,你的菜单添加事件监听是用内部类这样的写法,那和第二张图片里的implements ActionListener没有什么关系呀?!另外当点击菜单以后会新建一个ShowAllStudents对象,因为这个类继承JFrame,可能在构造方法里有setVisible(true);所以会显示出来,这是从没有JFrame对象到创建JFrame对象的过程,如果你JFrame已经有了的话就直接setVisible()就可以控制那个JFrame是否显示了。
还有就是在actionPerformed()方法里用e.getSource()可以获取消息源,你如果想知道是不是queryAllMenu被点击的话可以在actionPerformed()里加if(e.getSource == queryAllMenu),不过因为它们可能是在2个不同的类里,所以写actionPerformed()的类不一定能看到queryAllMenu,这就自己想办法吧,你可以一个类里有另外一个类的引用,或者((JMenuItem)e.getSource()).getText().equals(XXXX).....
额。。。追问吧。。。。。
你少了一个菜单项,在菜单项上添加监听器。
import java.awt.event.ActionEventimport java.awt.event.ActionListener
import javax.swing.JFrame
import javax.swing.JMenu
import javax.swing.JMenuBar
import javax.swing.JMenuItem
import javax.swing.JOptionPane
import javax.swing.SwingUtilities
public class TestWin extends JFrame {
{
JMenuBar jmb = new JMenuBar()//创建菜单栏
JMenu jm1 = new JMenu("帮助")//创建菜单
jmb.add(jm1)
JMenuItem jmi = new JMenuItem("帮助")//创建菜单项
jm1.add(jmi)//把菜单项添加到菜单中
jmi.addActionListener(new ActionListener() {//给菜单项添加动作监听器
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(TestWin.this, "窗口中有一句话")//显示消息对话框
}
})
setJMenuBar(jmb)
setTitle("时钟")// 标题
setSize(800, 600)
setLocationRelativeTo(null)// 窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE)// 窗口点击关闭时,退出程序
setVisible(true)// 窗口可见
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new TestWin())
}
}