import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MyGraphics extends JFrame implements ActionListener
{
JMenuBar jMenuBarOne;
JMenu Shape,Color,EXIT;
JMenuItem Line,Circle,Rectangle,RED,BLUE,exit;
MyCanvas can ;
public MyGraphics()
{
Container c = getContentPane();
can = new MyCanvas();
jMenuBarOne = new JMenuBar ();
Shape = new JMenu("形状");
Color = new JMenu("颜色");
EXIT = new JMenu("结束");
Line = new JMenuItem("直线");
Circle = new JMenuItem("圆");
Rectangle = new JMenuItem("椭圆");
RED = new JMenuItem("红");
BLUE = new JMenuItem("蓝");
exit = new JMenuItem("退出");
can.setSize(200,300);
c.add(can,"South");
this.setJMenuBar(jMenuBarOne);
jMenuBarOne.add(Shape);
jMenuBarOne.add(Color);
jMenuBarOne.add(EXIT);
Shape.add(Line);
Shape.add(Circle);
Shape.add(Rectangle);
Color.add(RED);
Color.add(BLUE);
EXIT .add(exit);
Line.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("我的画板");
this.setSize(800, 600);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == Line)
{
can.method(1) ; }
}
public static void main(String[] args)
{
new MyGraphics ();
}
}
class MyCanvas extends Canvas implements MouseListener
{
int x1 =0,y1=0 ,x2 =0 ,y2 = 0;
Graphics gra =getGraphics() ;
public MyCanvas()
{
this.setBackground(Color.white);
addMouseListener(this);
}
public void mousePressed(MouseEvent e)
{
x1 = e.getX();
y1 = e.getY();
}
public void mouseReleased(MouseEvent e)
{
x2 = e.getX();
y2 = e.getY();
}
public void mouseEntered(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void method(int flag)
{
switch(flag)
{
case 1: gra.drawLine(x1, y1, x2, y2);break;
}
}
}先实现画直线的功能,点了直线那个选项出现Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError MyGraphics.java:57
import java.awt.event.*;
import java.awt.*;
public class MyGraphics extends JFrame implements ActionListener
{
JMenuBar jMenuBarOne;
JMenu Shape,Color,EXIT;
JMenuItem Line,Circle,Rectangle,RED,BLUE,exit;
MyCanvas can ;
public MyGraphics()
{
Container c = getContentPane();
can = new MyCanvas();
jMenuBarOne = new JMenuBar ();
Shape = new JMenu("形状");
Color = new JMenu("颜色");
EXIT = new JMenu("结束");
Line = new JMenuItem("直线");
Circle = new JMenuItem("圆");
Rectangle = new JMenuItem("椭圆");
RED = new JMenuItem("红");
BLUE = new JMenuItem("蓝");
exit = new JMenuItem("退出");
can.setSize(200,300);
c.add(can,"South");
this.setJMenuBar(jMenuBarOne);
jMenuBarOne.add(Shape);
jMenuBarOne.add(Color);
jMenuBarOne.add(EXIT);
Shape.add(Line);
Shape.add(Circle);
Shape.add(Rectangle);
Color.add(RED);
Color.add(BLUE);
EXIT .add(exit);
Line.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("我的画板");
this.setSize(800, 600);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == Line)
{
can.method(1) ; }
}
public static void main(String[] args)
{
new MyGraphics ();
}
}
class MyCanvas extends Canvas implements MouseListener
{
int x1 =0,y1=0 ,x2 =0 ,y2 = 0;
Graphics gra =getGraphics() ;
public MyCanvas()
{
this.setBackground(Color.white);
addMouseListener(this);
}
public void mousePressed(MouseEvent e)
{
x1 = e.getX();
y1 = e.getY();
}
public void mouseReleased(MouseEvent e)
{
x2 = e.getX();
y2 = e.getY();
}
public void mouseEntered(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void method(int flag)
{
switch(flag)
{
case 1: gra.drawLine(x1, y1, x2, y2);break;
}
}
}先实现画直线的功能,点了直线那个选项出现Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError MyGraphics.java:57
* return <code>null</code> if this component is currently not
* displayable.
lz发的exception是错的吧,应该是个nullpointerexception才对