公共无效paintComponent(图形g)不工作

问题描述 投票:0回答:2

我是 java Swing 的初学者。 我的代码是这样的:

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);
            }
        }
     }
}

当我执行此操作时,它给了我这个错误:

enter image description here

如何增强此代码并解决上述错误。

我也看过其他代码,但在paintComponent中出现了错误。

如果我将@Override放在paintComponent之前......它会给出此错误:

1) ';'声明缺失。 2) 非法的表达式开始。

java
2个回答
3
投票

就像 BackSlash 评论的那样,你不能在现有方法中声明方法。

试试这个:

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]);
    }  
}

要绘制多条线,您需要将线数组添加到另一个数据结构(如 ArrayList)中,并在 PaintComponent 方法中迭代此列表并绘制所有内容。


0
投票

导入javax.swing。; 导入 java.awt.;

公共类 HeartShape 扩展 JPanel {

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    
    // Đặt màu cho hình trái tim
    g.setColor(Color.RED);

    // Vẽ hình trái tim
    int[] xPoints = { 150, 200, 250, 300, 250, 200 };
    int[] yPoints = { 200, 100, 100, 200, 300, 300 };
    g.fillPolygon(xPoints, yPoints, xPoints.length);
    
    // Vẽ thêm vòng cung để hoàn thành hình trái tim
    g.fillArc(100, 100, 100, 100, 0, 180);
    g.fillArc(200, 100, 100, 100, 0, 180);
}

public static void main(String[] args) {
    JFrame frame = new JFrame("Vẽ Hình Trái Tim");
    HeartShape heartShape = new HeartShape();
    
    frame.add(heartShape);
    frame.setSize(400, 400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

}

© www.soinside.com 2019 - 2024. All rights reserved.