Java 试图画线时按钮不起作用

Java 试图画线时按钮不起作用,java,button,awt,paint,Java,Button,Awt,Paint,我是Java新手,自学并尝试构建这个程序。它会在鼠标点击时创建点,但在按下按钮时不会画线。(最终这条线会把这些点连接起来,但我还没到那里。)首先,我只需要让它在按下时画一些东西,然后从那里开始工作。我尝试了很多方法,但都没能成功。这是我的密码: public void init() { LineDrawListener listener = new LineDrawListener (); addMouseListener (listener); Button line

我是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;
    }
}
任何关于如何使按钮工作的帮助都将不胜感激。提前谢谢

  • 不要在顶级容器(如
    JApplet
  • 而是在
    JPanel
    上绘制,覆盖
    paintComponent
    方法并调用
    super.paintComponet(g)

  • 不要从
    paint()
    方法内部调用
    repaint()
    。在
    actionPerformed()中调用它

  • 学会发布
  • 第三是你最可怕的问题

  • 不要在顶级容器(如
    JApplet
  • 而是在
    JPanel
    上绘制,覆盖
    paintComponent
    方法并调用
    super.paintComponet(g)

  • 不要从
    paint()
    方法内部调用
    repaint()
    。在
    actionPerformed()中调用它

  • 学会发布
  • 第三个问题是你最可怕的问题

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

    查看定制paintint的两种常用方法的工作示例:

  • 通过使用列表跟踪要绘制的对象
  • 通过绘制缓冲区图像
  • 不要覆盖paint()。不要在绘制方法中调用repaint(),这可能会导致无限循环

    查看定制paintint的两种常用方法的工作示例:

  • 通过使用列表跟踪要绘制的对象
  • 通过绘制缓冲区图像

  • 无法获取要绘制的线的原因是
    repaint()
    发布了重新绘制组件的请求。您正在使用它,就好像它以某种方式刷新了视图一样。您需要更改代码中的三项内容,全部在
    paint()

  • 不要在
    paint()
  • 覆盖
    paintComponent()
    而不是
    paint()
    ,这样,如果以后需要绘制边框,就会绘制边框
  • paintComponent()
    中调用
    super.paintComponent()
    ,为您进行一些初始化。也许不去做这么简单的事情是可以的,但将来要有好的实践
  • 下面是代码的样子:

    public void paintComponent(Graphics g)
    {
        super.paintComponent(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);
        }
        if (push == true)
        {
            g.drawLine (5, 5, 30 , 30);
        }
    }
    

    无法获取要绘制的线的原因是
    repaint()
    发布了重新绘制组件的请求。您正在使用它,就好像它以某种方式刷新了视图一样。您需要更改代码中的三项内容,全部在
    paint()

  • 不要在
    paint()
  • 覆盖
    paintComponent()
    而不是
    paint()
    ,这样,如果以后需要绘制边框,就会绘制边框
  • paintComponent()
    中调用
    super.paintComponent()
    ,为您进行一些初始化。也许不去做这么简单的事情是可以的,但将来要有好的实践
  • 下面是代码的样子:

    public void paintComponent(Graphics g)
    {
        super.paintComponent(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);
        }
        if (push == true)
        {
            g.drawLine (5, 5, 30 , 30);
        }
    }
    

    1) 为了更快地获得更好的帮助,请发布一个。2) 请不要忘记在问题中添加“?”!有些人在页面中搜索“?”,如果“问题”中不存在,则直接转到行中的下一个(实际)问题。3) 请对代码、输入/输出和结构化文档(如HTML或XML)使用代码格式。要做到这一点,请选择样本并单击消息发布/编辑表单上方的
    {}
    按钮。标签错误。这是awt,不是swing,是button,不是jbutton。
    public void paint(Graphics g){…repaint();
    将导致一个无限循环。无论您使用什么资源来学习编程,摆脱它们,直接进入Java教程。我认为,您需要特别关注..
    setSize(小程序宽度、小程序高度);
    也不要这样做。小程序的大小在加载它的HTML中设置。顺便说一下-1)为什么要编写小程序?如果是因为老师的规范,请参考他们。2)为什么要使用AWT而不是Swing?关于放弃使用AWT组件的许多好理由,请参阅我的答案。如果您需要支持较旧的基于AWT的API,请参阅。1)为了尽快获得更好的帮助,请发布一条。2)请不要忘记在问题中添加“?”。有些人在“?”的页面,如果“问题”中不存在,则直接转到第行中的下一个(实际)问题。3)请对代码、输入/输出和结构化文档(如HTML或XML)使用代码格式。为此,请选择示例并单击
    {}
    消息发布/编辑表单上方的按钮。标记错误。这是awt,不是swing,是button,不是jbutton。
    公共无效绘制(图形g){…重新绘制()
    将导致无限循环。无论您使用什么资源来学习编程,请摆脱它们并直接转到Java教程。我认为,您需要特别关注..
    设置大小(小程序宽度,小程序高度)
    也不要这样做。小程序的大小是在加载它的HTML中设置的。顺便说一句-1)为什么要编写小程序?如果是由于老师的规范,请参考他们。2)为什么要使用AWT而不是Swing?请参阅我的答案,以获得放弃使用AWT组件的许多好理由。如果需要支持旧的基于AWT的API,请参阅。@misssdavid您有什么问题吗我真的很想看到他们。不是说你错了,但我真的很想看到一些有效的证据sources@MistressDavid这些都是无效的信息来源。这是谷歌搜索。其中一些结果引出了一个问题,我问自己这些好处