我在检测菜单项上的点击时遇到问题。我需要在“创建菜单”上单击“Road”menuItem时创建一条线,但是当我点击它时没有任何反应。
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);
}}
答案 0 :(得分:1)
在Java-swing
中的菜单项上使用鼠标侦听器
不要使用MouseListener!
JMenuItem旨在与ActionListener一起使用。
阅读How to Use Menus上Swing教程中的部分,了解可下载和测试的更多信息和工作示例。
此外,由于使用null布局将组件添加到面板,因此需要设置DrawLine组件的大小,否则大小将为(0,0)并且不会绘制任何内容。