简体   繁体   English

公共无效paintComponent(Graphics g)无法正常工作

[英]public void paintComponent(Graphics g) not working

I am a beginner to java Swing. 我是Java Swing的初学者。 My Code is this: 我的代码是这样的:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class LineDrawing extends JComponent
{   
    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        int startX = 0;
        int startY = 0;
        int endX = 0;
        int endY = 0;

        addMouseListener(new MouseListener(){
            @Override
            public void mousePressed(MouseEvent e)
            {
                startX = e.getXOnScreen();
                startY = e.getYOnScreen();
            }

            @Override
            public void mouseReleased(MouseEvent e)
            {
                endX = e.getXOnScreen();
                endY = e.getYOnScreen();
                Draw d = new Draw();
                d.lineDraw(startX,startY,endX,endY);
                panel.add(d);
                frame.add(panel);
            }

            @Override
            public void mouseClicked(MouseEvent e){}

            @Override
            public void mouseEntered(MouseEvent e){}

            @Override
            public void mouseExited(MouseEvent e){}
        });

        addMouseMotionListener(new MouseMotionListener(){
            @Override
            public void mouseDragged(MouseEvent e)
            {
                endX = e.getXOnScreen();
                endY = e.getYOnScreen();
            }

            @Override
            public void mouseMoved(MouseEvent e){}
        });

        frame.setSize(500,400);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    public class Draw extends JPanel
    {
        public void lineDraw(int x1,int y1,int x2,int y2)
        {
            @Override
            protected void paintComponent(Graphics g)
            {
                super.paintComponent(g);
                g.setColor(Color.black);
                g.drawLine(x1,y1,x2,y2);
            }
        }
     }
}

While I execute this it gives me this error: 当我执行此操作时,它给了我这个错误:

在此处输入图片说明

How can I enhance this code and solve the above mentioned error. 如何增强此代码并解决上述错误。

I have seen other codes too but something wrong occurs in paintComponent. 我也看过其他代码,但是paintComponent中发生了错误。

If I leave putting @Override before paintComponent ... It gives this error: 如果我将@Override放在paintComponent之前...则会出现此错误:

1) ';' 1)';' statement missing. 声明遗失。 2) illegal start of expression. 2)非法开始表达。

Like BackSlash commented you can't declare a method inside of an existing. 就像BackSlash注释的那样,您不能在现有的内部声明方法。

Try this: 尝试这个:

public class Draw extends JPanel {

    private int[] line = new int[4];

    public void lineDraw(int x1,int y1,int x2,int y2) {
        line[0] = x1;
        line[1] = y1;
        line[2] = x2;
        line[3] = y2;
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.black);
        g.drawLine(line[0],line[1],line[2],line[3]);
    }  
}

To draw more than one line you need to add the line array into another data structure like an ArrayList and in the paintComponent method you iterate through this list and paint everything. 要绘制多条线,您需要将线数组添加到另一个数据结构(如ArrayList)中,并在paintComponent方法中迭代此列表并绘制所有内容。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM