我有一个JMenu并且我向它添加了一个Actionlistener,但是Action侦听器没有做任何事情。
我试图让mnExit菜单退出程序(System.exit(0)),但Actionlistener没有做任何事情。
谁能说出我做错了什么?
import java.io.IOException;
public class Main {
private int a;
private Server s;
private Client c;
private JFrame j;
private static JTextField ipClient;
private static JTextField hostPort;
private static JTextField portClient;
private static JPasswordField passwordClient;
private static JPasswordField passwordHost;
/**
* @param args
* @wbp.parser.entryPoint
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Main start=new Main();
JFrame j=new JFrame("IControl");
j.setSize(new Dimension(448, 291));
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setSize(700,700);
j.getContentPane().setLayout(null);
JButton clientButton = new JButton("connect to server");
clientButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Client c=new Client("localhost","bbc");
}
});
clientButton.setBounds(32, 209, 154, 23);
j.getContentPane().add(clientButton);
JButton serverButton = new JButton("wait for connection");
serverButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Server s=new Server("abc");
}
});
serverButton.setBounds(278, 209, 154, 23);
j.getContentPane().add(serverButton);
ipClient = new JTextField();
ipClient.setBounds(67, 96, 123, 20);
j.getContentPane().add(ipClient);
ipClient.setColumns(10);
hostPort = new JTextField();
hostPort.setBounds(298, 130, 86, 20);
j.getContentPane().add(hostPort);
hostPort.setColumns(10);
JLabel lblIp = new JLabel("IP");
lblIp.setBounds(25, 99, 32, 14);
j.getContentPane().add(lblIp);
JLabel lblPort = new JLabel("port");
lblPort.setBounds(25, 133, 32, 14);
j.getContentPane().add(lblPort);
portClient = new JTextField();
portClient.setBounds(67, 130, 86, 20);
j.getContentPane().add(portClient);
portClient.setColumns(10);
passwordClient = new JPasswordField();
passwordClient.setBounds(67, 161, 86, 20);
j.getContentPane().add(passwordClient);
passwordHost = new JPasswordField();
passwordHost.setBounds(298, 161, 86, 20);
j.getContentPane().add(passwordHost);
JLabel lblPass = new JLabel("pass");
lblPass.setBounds(32, 158, 32, 14);
j.getContentPane().add(lblPass);
JMenuBar menuBar = new JMenuBar();
menuBar.setBounds(0, 0, 93, 21);
j.getContentPane().add(menuBar);
JMenu mnFile = new JMenu("File");
menuBar.add(mnFile);
JMenu mnExit = new JMenu("Exit");
mnExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
mnFile.add(mnExit);
j.setVisible(true);
// j.pack();
}
/**
* @wbp.parser.entryPoint
*/
public Main()
{
}
}
答案 0 :(得分:4)
您必须从
更改代码行JMenu mnExit = new JMenu("Exit");
到
JMenuItem mnExit = new JMenuItem("Exit");
因为您定义JMenu
而不是JMenuItem
,但不要忘记创建JMenu
,然后将JMenuItem
放在那里,更多内容在JMenu / JMenuItem教程中}
答案 1 :(得分:0)
因为jmenu不会触发自己的动作监听器,所以最好使用的选项是在其上使用鼠标事件。像
jMenu1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jMenuMouseClicked(evt);
}
......
private void jMenuMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
if(evt.getButton() == MouseEvent.BUTTON1)
System.out.println("good");
}