【发布时间】:2020-06-26 11:46:03
【问题描述】:
我正在尝试构建一个允许您绘制图表的程序。我目前正在尝试添加一个函数来向图中添加一个节点。我的想法是用户可以单击一个按钮,然后单击窗口上的某个位置以添加一个节点。我现在面临以下两个问题:
- drawCenteredCircle 方法需要我传递一个 Graphics 对象,但是哪个?由于它是一个抽象类,我不能简单地声明一个新实例,那么我可以传递什么?
-
当前圆心的位置将是单击按钮的位置。我该如何解决这个问题?我希望AFTER按钮被点击,NEXT点击会添加一个节点。基本上我需要一个等待另一个用户输入然后添加这个节点的函数。
公共类 Main 扩展 JFrame {
int width = 500; int height = 500; JLabel label; JPanel panel; JButton addNodeButton; public Main() { setSize(width, height); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); panel = new JPanel(); label = new JLabel(); addNodeButton = new JButton("Add Node"); addNodeButton.addActionListener((new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Point p = MouseInfo.getPointerInfo().getLocation(); drawCenteredCircle(g, p.x, p.y, 3); } })); panel.add(addNodeButton); this.add(panel); setVisible(true); } public static void main(String a[]) { new Main(); } public void drawCenteredCircle(Graphics2D g, int x, int y, int r) { x = x-(r/2); y = y-(r/2); g.fillOval(x,y,r,r); }}
【问题讨论】:
-
1) 需要我传递一个 Graphics 对象 - 这不是自定义绘画的方式。您将在 JPanel 上进行自定义绘画。 Graphics 对象被传递给面板供您使用。请参阅Custom Painting Approaches 并决定哪种方法最适合您。
-
2) * 圆心将是单击按钮的位置。* - 然后您可以执行类似 a) 创建一个布尔实例变量来指示“添加节点”按钮是否被按下。 b) 将 MouseListener 添加到 JPanel。在 mousePressed 事件中,您将检查变量是否为 true 并添加节点,然后将变量重置为 false。
标签: java swing user-interface event-handling awt