尝试绘制线条时按钮不起作用

时间:2013-12-31 17:53:23

标签: java button awt paint

我是Java新手并自学并尝试构建此程序。鼠标单击时会创建点,但按下按钮时不会画线。 (最终这条线将连接点,但我还没有。)首先,我只需要在推动并从那里开始工作时画出一些东西。我尝试了很多东西,但我无法让它发挥作用。这是我的代码:

public void init()
{
    LineDrawListener listener = new LineDrawListener ();
    addMouseListener (listener);

    Button lineGraph = new Button("Graph Line");
    lineGraph.addActionListener (this);
    add (lineGraph, BorderLayout.EAST);

    setBackground (Color.yellow);
    setSize (APPLET_WIDTH, APPLET_HEIGHT);
}

public void paint(Graphics g)
{
    // draws dots on screen
    g.setColor(Color.blue);
    if (current != null)
    {
        xcoordinates.addElement (current.x);
        ycoordinates.addElement (current.y);
        count++;
        g.fillOval (current.x-4, current.y-4, 10, 10);
        repaint();
    }
    if (push == true)
    {
        g.drawLine (5, 5, 30 , 30);
        repaint();
    }
}

class LineDrawListener extends MouseAdapter
{
    public void mouseClicked (MouseEvent event)
   {
       current = event.getPoint();

    repaint();
}

}
public void actionPerformed (ActionEvent event)
{
    Object action = event.getSource();
    if(action==lineGraph)
    {
        push = true;
    }
}

任何有关如何让按钮工作的帮助将非常感激。提前谢谢。

3 个答案:

答案 0 :(得分:3)

  1. 不要在JApplet
  2. 等顶级容器上绘画
  3. 而是在JPanel上绘制并覆盖paintComponent方法并调用super.paintComponet(g)

    @Override
    protected void paintComponent(Graphic g){
        super.paintComponent(g);
        ...
    }
    
  4. 请勿在{{1​​}}方法内拨打repaint()。在paint()

  5. 中调用它
  6. 学习发布SSCCE
  7. 3号是你最可怕的问题

答案 1 :(得分:3)

不要覆盖paint()。不要在绘制方法中调用repaint(),这会导致无限循环。

查看Custom Painting Approaches了解自定义paintint的两种常用方法的工作示例:

  1. 使用List来跟踪要绘制的对象
  2. 通过绘画到BufferedImage

答案 2 :(得分:3)

您无法获取该行的原因是repaint()发布了重新绘制该组件的请求。您正在使用它,就像它以某种方式刷新视图。您需要在代码中更改三件事,所有内容都在paint()中:

  1. 请勿在{{1​​}}
  2. 中致电repaint()
  3. 覆盖paint()而不是paintComponent(),以便在以后应该使用它们时绘制边框。
  4. paint()中调用super.paintComponent()为您做一些初始化。对于未来的这种简单但良好的实践,这可能是不行的。
  5. 以下是代码的样子:

    paintComponent()