Java drawLine命令不支持';不要在屏幕上画画

Java drawLine命令不支持';不要在屏幕上画画,java,draw,Java,Draw,所以我正在制作一个绘画程序,通过输入来自IRC服务器聊天室的命令来绘制。因此,除了绘图之外,其他一切都正常工作,我对它进行了检查(您可以看到检查系统out:P),但drawLine()命令没有起作用。请帮忙 PS:这是一个项目中的类文件,其他一切都可以发送到这里相信我 代码: import java.awt.*; 导入java.awt.event.*; 导入javax.swing.*; 类PadDraw扩展了JComponent { //这就是你画的形象 图像; //这就是我们将要利用的 图形2

所以我正在制作一个绘画程序,通过输入来自IRC服务器聊天室的命令来绘制。因此,除了绘图之外,其他一切都正常工作,我对它进行了检查(您可以看到检查系统out:P),但drawLine()命令没有起作用。请帮忙

PS:这是一个项目中的类文件,其他一切都可以发送到这里相信我

代码:

import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
类PadDraw扩展了JComponent
{
//这就是你画的形象
图像;
//这就是我们将要利用的
图形2d图形2d;
//这些会保持我们的坐标
int currentX=0,currentY=0,oldX=0,oldY=0;
公营机构
{
}
命令上的公共void(字符串msg)
{
if(消息等信号(“up”))
{
如果(旧的>0)
{
电流Y=电流Y-30;
if(graphics2D!=null)
图形2D.绘制线(oldX,oldY,currentX,currentY);
重新油漆();
oldX=当前x;
oldY=当前;
}
}
if(msg.equalsIgnoreCase(“down”))
{
如果(旧的<861)
{
System.out.println(msg);
System.out.println(“起始Y:+当前Y”);
电流Y=电流Y+30;
System.out.println(“结束Y:+currentY”);
if(graphics2D!=null)
图形2D.绘制线(oldX,oldY,currentX,currentY);
重新油漆();
oldX=当前x;
oldY=当前;
System.out.println(“Old Y:+oldY”);
}
}
if(消息等信号(“左”))
{
如果(oldX>0)
{
currentX=currentX-30;
if(graphics2D!=null)
图形2D.绘制线(oldX,oldY,currentX,currentY);
重新油漆();
oldX=当前x;
oldY=当前;
}
}
if(msg.equalsIgnoreCase(“右”))
{
如果(oldX<847)
{
电流X=电流X+30;
if(graphics2D!=null){
图形2D.绘制线(oldX,oldY,currentX,currentY);
重新油漆();
}
oldX=当前x;
oldY=当前;
}
}
}
公共组件(图形g)
{
if(image==null)
{
image=createImage(getSize().width,getSize().height);
graphics2D=(graphics2D)image.getGraphics();
graphics2D.setRenderingHint(RenderingHits.KEY\u抗锯齿,RenderingHits.VALUE\u抗锯齿\u开启);
清除();
}
g、 drawImage(image,0,0,null);
}
  • 您忘记在
    paintComponent
    方法中调用
    super.paintComponent
    。有些人会故意错误地忽略它,认为这是实现“连续”的正确方法绘画,但你实际上正在做的是打破绘画链,你实际上看到的是绘画作品,这会让你相信绘画功能是连续的

  • 这样做不会产生“连续”的绘制。首先,你甚至没有画出
    JComponent
    图形上下文的线。其次,一旦你在
    paintComponent
    方法中正确调用
    super.paintComponent
    ,你就会丢失以前的绘制

  • 以下是您可以/应该做的。。。
  • 拥有
    Line2D
    对象的列表

    List<Line2D> lines = new ArrayList<>();
    
    哦,顺便说一句,
    paintComponent
    应该受到
    保护
    而不是
    公开

  • 如果要向图形中添加线条,只需向列表中添加另一个
    Line2D
    对象,然后
    repaint()



  • 请访问了解更多信息,坦率地说,代码有点长,格式不正确。看看您是否可以对此采取一些措施。这可能会帮助您获得更多/更好的答案。您的代码格式很难阅读,并且不符合java约定。请在您的帖子中将每个类划分到各自的代码窗口(即,确保在一节课的结束和下一节课的开始之间至少有1或2个空行)。如果容易阅读,那么您可能会得到更快/更好的帮助。您的示例中似乎有很多内容与您的问题没有直接关系(设置按钮等)尽量从代码中删除尽可能多的内容,直到只剩下一个演示问题的示例为止。这既可以帮助这里的人快速理解正在发生的事情,也可以帮助你自己解决问题。我现在做得少了很多:pI对java还不是很好,所以我不太了解:)所以这里有一个问题:1)我把“List lines=new ArrayList()”放在哪里?就像它说的“类型列表不是泛型的;它不能用参数参数化”2)什么是“…”意思是?你导入了错误的
    List
    。有一个名为
    java.AWT.List
    的AWT组件,它相当于Swing的
    JList
    ,还有一个数据结构
    java.util.List
    。你需要后者时导入了前者。你阅读的任何编程书籍或教程都将使用
    ..
    a这只是说这里可能有一些代码。它很琐碎,没有意义,不应该放在你的代码中。这只是为了解释。在这种情况下,它可能意味着你的
    paintComponent
    方法中的其他代码。你认为我可以得到你的skype或其他东西,这样你就可以多帮点忙了吗?那太好了!我根本没有人可以问java方面的任何帮助。这里有一百万人要问。问题是你如何问问题和问什么。太宽泛的问题不太可能得到回答。描述问题不够详细的问题不太可能得到回答。与GUI编程相关的问题优先考虑除此之外,这个网站并不是一个真正的服务台,它只是一个问答。这里的大多数人都是专业人士,并不是真正的h
    List<Line2D> lines = new ArrayList<>();
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        ...
        for (Line2D line : lines) {
            g2.draw(line);
        }
    }
    
    lines.add(new Line2D.Double(x1, y1, x2, y2));
    repaint();