[英]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.