簡體   English   中英

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

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

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

當我執行此操作時,它給了我這個錯誤:

在此處輸入圖片說明

如何增強此代碼並解決上述錯誤。

我也看過其他代碼,但是paintComponent中發生了錯誤。

如果我將@Override放在paintComponent之前...則會出現此錯誤:

1)';' 聲明遺失。 2)非法開始表達。

就像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方法中迭代此列表並繪制所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM