在JavaSwing中的菜单项上使用鼠标侦听器
我感觉不到菜单项上的点击。我需要在“创建”菜单上单击“道路”菜单项时创建一条线,但单击它时什么也没有发生在JavaSwing中的菜单项上使用鼠标侦听器,java,swing,mouseevent,mouselistener,Java,Swing,Mouseevent,Mouselistener,我感觉不到菜单项上的点击。我需要在“创建”菜单上单击“道路”菜单项时创建一条线,但单击它时什么也没有发生 import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import java.awt.e
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JMenu;
import java.awt.Color;
public class trafficSimulator extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
trafficSimulator frame = new trafficSimulator();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public trafficSimulator() {
setTitle("STS - Simple Traffic Simulator");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 817, 458);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JPanel panel = new JPanel();
panel.setBackground(Color.BLACK);
panel.setBounds(10, 59, 777, 339);
contentPane.add(panel);
JMenuBar menuBar = new JMenuBar();
menuBar.setBorderPainted(false);
menuBar.setBounds(0, 0, 799, 36);
contentPane.add(menuBar);
JMenu mnCreate = new JMenu("Create");
menuBar.add(mnCreate);
JMenuItem mnıtmRoad = new JMenuItem("Road");
mnıtmRoad.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
DrawLine myline = new DrawLine();
panel.add(myline); // this part doesn't work at all.
}
});
mnCreate.add(mnıtmRoad);
JMenuItem mnıtmRoundabout = new JMenuItem("Roundabout");
mnCreate.add(mnıtmRoundabout);
JMenuItem mnıtmNode = new JMenuItem("Node");
mnCreate.add(mnıtmNode);
JMenu mnDelete = new JMenu("Delete");
menuBar.add(mnDelete);
JMenu mnSave = new JMenu("Save");
menuBar.add(mnSave);
}
}
这是一个类,我将在鼠标侦听器中使用它的对象来创建一行
import java.awt.*;
import javax.swing.*;
public class DrawLine extends JPanel {
public void paintComponent(Graphics g) {
//vertical line
g.setColor(Color.white);
g.drawLine(20, 20, 20, 120);
}}
在JavaSwing中的菜单项上使用鼠标侦听器
不要用鼠标听器
JMenuItem设计用于ActionListener
阅读上Swing教程中的部分,以获取更多信息和可下载并测试的工作示例
此外,由于使用空布局将构件添加到面板中,因此需要设置绘制线构件的大小,否则该大小将为(0,0),并且没有任何可绘制的内容
在JavaSwing中的菜单项上使用鼠标侦听器
不要用鼠标听器
JMenuItem设计用于ActionListener
阅读上Swing教程中的部分,以获取更多信息和可下载并测试的工作示例
此外,由于使用空布局将构件添加到面板中,因此需要设置绘制线构件的大小,否则该大小将为(0,0),并且没有任何可绘制的内容