要划线必须获得Graphics实例,必须是由paint(Graphics g)生成的Graphics,所以你的line()必须是在paint(Graphics g)方法体中完成,一旦从paint(Graphics g)返回则Graphics实例将不再存。public void paint(Graphics g){
line(g);//调用line(),传递g,每次画线都是repaint()过程。
}public void line(Graphics g){
}
line(g);//调用line(),传递g,每次画线都是repaint()过程。
}public void line(Graphics g){
}
line.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){
line();}
line()出错:line(java.awt.Graphics)in Huaban cannot be applied to()什么意思?
在鼠标事件mouseDragged()事件里记下当前的鼠标坐标x2,y2,然后调用repaint()就可以了。
因为repaint()可以自动调用paint(Graphics g)
{
x1=e.getX(); // 取得鼠标按下时的X坐标 (绘图起始点是X坐标)
y1=e.getY(); // 取得鼠标按下时的Y坐标 (绘图起始点是Y坐标)
}
public void mouseDragged(MouseEvent e)
{
Graphics g=getGraphics();
x2=e.getX(); // 取得鼠标拖拽时的X坐标
y2=e.getY(); // 取得鼠标拖拽时的Y坐标
g.drawLine(x1,y1,x2,y2); // 绘出(x1,y1)到(x2,y2)的连线
x1=x2; // 更新绘图起始点的X坐标
y1=y2; // 更新绘图起始点的Y坐标
public void paint(Graphics g){
line(g);//调用line(),传递g,每次画线都是repaint()过程。
}public void line(Graphics g){ }
中,不行啊,我真的不是很懂,尤其是这种情况
x1=e.getX(); // 取得鼠标按下时的X坐标 (绘图起始点是X坐标)
y1=e.getY(); // 取得鼠标按下时的Y坐标 (绘图起始点是Y坐标)
}
public void mouseDragged(MouseEvent e){
x2=e.getX(); // 取得鼠标拖拽时的X坐标
y2=e.getY(); // 取得鼠标拖拽时的Y坐标
repaint();
}
public void mouseReleased(MouseEvent e){
x2=e.getX(); // 取得鼠标拖拽时的X坐标
y2=e.getY(); // 取得鼠标拖拽时的Y坐标
repaint();
}
public void paint(Graphics g){
line(g);
}
public void line(Graphics g){
g.drawLine(x1,y1,x2,y2); // 绘出(x1,y1)到(x2,y2)的连线
}
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame{
static final int LINE=0;
static final int RECT=1;
static final int OVAL=2;
static final int ARC=3;
static final Point INVALID=new Point(-1,-1);
int status=LINE;
Point start,pro,temp,end;
boolean finished=false;
JPanel dp=new JPanel(){
public void paintComponent(Graphics g){
super.paintComponent(g);
g.clearRect(0,0,getSize().width,getSize().height);
Color oldColor=g.getColor();
Point sp=null;
if(finished && !start.equals(INVALID) && !start.equals(end)){
switch( status){
case LINE:
g.drawLine(start.x,start.y,end.x,end.y);
g.setColor(Color.red);
g.drawLine(end.x-1,end.y,end.x+1,end.y);
g.drawLine(end.x,end.y-1,end.x,end.y+1);
g.drawLine(start.x-1,start.y,start.x+1,start.y);
g.drawLine(start.x,start.y-1,start.x,start.y+1);
g.setColor(oldColor);
break;
case RECT:
sp=startPoint(start,end);
g.drawRect(sp.x,sp.y,Math.abs(end.x-start.x),Math.abs(end.y-start.y));
break;
}
}
if(!finished && !start.equals(INVALID)){
switch( status){
case LINE:
g.setColor(Color.red);
g.drawLine(start.x-1,start.y,start.x+1,start.y);
g.drawLine(start.x,start.y-1,start.x,start.y+1);
if(!temp.equals(pro) && pro!=INVALID){
if(!temp.equals(INVALID)){
g.setColor(getBackground());
g.drawLine(start.x,start.y,temp.x,temp.y);
}
g.setColor(Color.green);
g.drawLine(start.x,start.y,pro.x,pro.y);
temp=pro;
} g.setColor(oldColor);
break;
case RECT:
int x,y;
if(!temp.equals(pro) && pro!=INVALID){
g.setColor(getBackground());
sp=startPoint(start,temp);
g.drawRect(sp.x,sp.y,Math.abs(temp.x-start.x),Math.abs(temp.y-start.y)); g.setColor(Color.green);
sp=startPoint(start,pro);
g.drawRect(sp.x,sp.y,Math.abs(pro.x-start.x),Math.abs(pro.y-start.y));
temp=pro;
}
g.setColor(oldColor);
break;
}
} }
};
public Test(){
super();
JMenuBar bar=new JMenuBar();
bar.add(buildShapeMenu());
setJMenuBar(bar);
getContentPane().add(dp,BorderLayout.CENTER);
start=INVALID;
pro=INVALID;
temp=pro;
dp.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
finished=false;
start=e.getPoint();
repaint();
}
public void mouseReleased(MouseEvent e){
finished=true;
end=e.getPoint();
repaint();
} });
dp.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
pro=e.getPoint();
repaint(); }
});
setSize(400,300);
show();
}
public JMenu buildShapeMenu() {
JMenu file = new JMenu("Shape"); JMenuItem line = new JMenuItem("Line");
JMenuItem rect= new JMenuItem("Rect");
JMenuItem oval = new JMenuItem("Oval");
JMenuItem arc = new JMenuItem("Arc");
file.add(line);
file.add(rect);
file.add(oval);
file.add(arc);
line.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){
status=LINE;//line();
}
});
rect.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){
status=RECT;
}
});
return file;
}
public Point startPoint(Point p1,Point p2){
int x,y;
if(p2.x<p1.x)
x=p2.x;
else
x=p1.x;
if(p2.y<p1.y)
y=p2.y;
else
y=p1.y;
return new Point(x,y); }
public static void main(String[] args){
Test app=new Test();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}}