【发布时间】:2021-03-24 17:47:16
【问题描述】:
我仍在学习 java 的过程中,所以我可以使用一些帮助。 我创建了一个弹出菜单,当我在面板上单击鼠标左键时会打开它。弹出菜单使用 MouseListener 读取需要打开的坐标。 现在我想在弹出菜单打开的地方使用相同的 x 和 y 来绘制我从该位置的菜单中选择的形状(如果形状是一个点,它应该在菜单打开的地方绘制,如果我选择一条线的话,线的起点将在该位置)。到目前为止的代码如下:
public class PnlDrawing extends JPanel {
public ArrayList<Shape> shapes = new ArrayList<Shape>();
public PnlDrawing() {
setSize(800,600);
}
public static void main(String[] args) {
JFrame frame = new JFrame("PnlDrawing");
frame.setSize(800, 600);
PnlDrawing drawing = new PnlDrawing();
frame.getContentPane().add(drawing);
frame.setVisible(true);
final JMenu subPopup = new JMenu("Add");
final JMenuItem popPoint = new JMenuItem("Point");
popPoint.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
final JMenuItem popLine = new JMenuItem("Line");
popLine.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
final JMenuItem popCircle = new JMenuItem("Circle");
popCircle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
final JMenuItem popDonut = new JMenuItem("Donut");
popDonut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
final JMenuItem popRectangle = new JMenuItem("Rectangle");
popRectangle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
final JMenuItem popMod = new JMenuItem("Modify");
popMod.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
final JMenuItem popRemove = new JMenuItem("Remove");
popRemove.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
JPopupMenu mainPopup = new JPopupMenu();
subPopup.add(popPoint);
subPopup.add(popLine);
subPopup.add(popCircle);
subPopup.add(popDonut);
subPopup.add(popRectangle);
mainPopup.add(subPopup);
mainPopup.addSeparator();
mainPopup.add(popMod);
mainPopup.add(popRemove);
mainPopup.show(e.getComponent(), e.getX(), e.getY());
}
}
});
}
@Override
public void paint(Graphics g) {
for (int i = 0; i < shapes.size(); i++)
{
shapes.get(i).draw(g);
}
}
}
我已经为每个形状和绘制方法实现了类。我只需要将这个菜单与绘图和鼠标位置连接起来,这样当我单击 Add -> Point 时它就会出现在面板上。 如果你有任何其他方式来做这一切,我很乐意听到。
【问题讨论】:
标签: java swing draw mouselistener