哪位兄弟能帮我看看啊,为什么我的paintComponent()没有被调用?
[Java code]
package fistTest;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MainFace extends JFrame implements ActionListener, MouseListener,MouseMotionListener{
int xStart=0,yStart=0,xEnd=0,yEnd=0;
Container c = this.getContentPane();
JMenuBar jmb = new JMenuBar(); JMenu jm1 = new JMenu("第一次实验");
JMenu jm2 = new JMenu("说明");
JMenu jm3 = new JMenu("帮助"); JMenuItem jmi1 = new JMenuItem("ADD算法画线(A)");
JMenuItem jmi2 = new JMenuItem("中点算法画线(M)");
JMenuItem jmi3 = new JMenuItem("Bresenham算法画线(B)");
JMenuItem jmi4 = new JMenuItem("退出(X)");
JMenu jm4 = new JMenu("演示画线(Y)"); JMenuItem jmiy1 = new JMenuItem("ADD画线演示(U)");
JMenuItem jmiy2 = new JMenuItem("中点画线演示(C)");
JMenuItem jmiy3 = new JMenuItem("Bresenham画线演示(P)");
JMenuItem jmi5 = new JMenuItem("作者(T)");
JMenuItem jmi6 = new JMenuItem("日期和时间"); JMenuItem jmi7 = new JMenuItem("help(E)");
MainFace(){
setLocation(250,150);
setSize(550, 500);
setTitle("第一次实验");
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addMouseListener(this);
addMouseMotionListener(this);
c.setLayout(new BorderLayout());
c.add(jmb,BorderLayout.NORTH); jmb.add(jm1);
jm1.setMnemonic('f');
jm1.addActionListener(this);
jmb.add(jm2);
jm2.setMnemonic('s');
jmb.add(jm3);
jm3.setMnemonic('h');
jm1.add(jmi1);
jmi1.addActionListener(this);
jmi1.setAccelerator(KeyStroke.getKeyStroke('A',Event.CTRL_MASK,false));
jm1.add(jmi2);
jmi2.addActionListener(this);
jmi2.setAccelerator(KeyStroke.getKeyStroke('M',Event.CTRL_MASK,false));
jm1.add(jmi3);
jmi3.addActionListener(this);
jmi3.setAccelerator(KeyStroke.getKeyStroke('B',Event.CTRL_MASK,false));
jm1.addSeparator();
jm1.add(jm4);
jm1.addSeparator();
jm1.add(jmi4);
jmi4.addActionListener(this);
jmi4.setAccelerator(KeyStroke.getKeyStroke('X',Event.CTRL_MASK,false));
jm2.add(jmi5);
jmi5.addActionListener(this);
jm2.add(jmi6);
jmi6.addActionListener(this);
jm3.add(jmi7);
jmi7.addActionListener(this);
jm4.add(jmiy1);
jmiy1.setAccelerator(KeyStroke.getKeyStroke('U',Event.CTRL_MASK,false));
jmiy1.addActionListener(this);
jm4.add(jmiy2);
jmiy2.setAccelerator(KeyStroke.getKeyStroke('C',Event.CTRL_MASK,false));
jmiy2.addActionListener(this);
jm4.add(jmiy3);
jmiy3.setAccelerator(KeyStroke.getKeyStroke('P',Event.CTRL_MASK,false));
jmiy3.addActionListener(this);
//new Thread(this).start();
}
public static void main(String[] args){
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}catch(UnsupportedLookAndFeelException e){
System.out.print("UnsupportedLookAndFeelException");
}catch(IllegalAccessException e){}catch(InstantiationException e){}catch(ClassNotFoundException e){}
new MainFace();
}
public void actionPerformed(ActionEvent e){
Cursor cu = new Cursor(Cursor.CROSSHAIR_CURSOR);
setCursor(cu);
}
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub }
public void mousePressed(MouseEvent arg0) {
xStart=arg0.getX();
yStart=arg0.getY();
repaint();
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent arg0){
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent arg0){
// TODO Auto-generated method stub
}
public void mouseMoved(MouseEvent arg0){
// TODO Auto-generated method stub
}
public void mouseDragged(MouseEvent arg0){
xEnd=arg0.getX();
yEnd=arg0.getY();
repaint();
}
public void paintComponent(Graphics g){
System.out.println("start已赋值"+"xStart="+xStart+" yStart="+yStart);
System.out.println("End已赋值"+"xEnd="+xEnd+" yEnd="+yEnd);
g.drawLine(xStart, yStart, xEnd, yEnd);
}
}
[/code]
[Java code]
package fistTest;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MainFace extends JFrame implements ActionListener, MouseListener,MouseMotionListener{
int xStart=0,yStart=0,xEnd=0,yEnd=0;
Container c = this.getContentPane();
JMenuBar jmb = new JMenuBar(); JMenu jm1 = new JMenu("第一次实验");
JMenu jm2 = new JMenu("说明");
JMenu jm3 = new JMenu("帮助"); JMenuItem jmi1 = new JMenuItem("ADD算法画线(A)");
JMenuItem jmi2 = new JMenuItem("中点算法画线(M)");
JMenuItem jmi3 = new JMenuItem("Bresenham算法画线(B)");
JMenuItem jmi4 = new JMenuItem("退出(X)");
JMenu jm4 = new JMenu("演示画线(Y)"); JMenuItem jmiy1 = new JMenuItem("ADD画线演示(U)");
JMenuItem jmiy2 = new JMenuItem("中点画线演示(C)");
JMenuItem jmiy3 = new JMenuItem("Bresenham画线演示(P)");
JMenuItem jmi5 = new JMenuItem("作者(T)");
JMenuItem jmi6 = new JMenuItem("日期和时间"); JMenuItem jmi7 = new JMenuItem("help(E)");
MainFace(){
setLocation(250,150);
setSize(550, 500);
setTitle("第一次实验");
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addMouseListener(this);
addMouseMotionListener(this);
c.setLayout(new BorderLayout());
c.add(jmb,BorderLayout.NORTH); jmb.add(jm1);
jm1.setMnemonic('f');
jm1.addActionListener(this);
jmb.add(jm2);
jm2.setMnemonic('s');
jmb.add(jm3);
jm3.setMnemonic('h');
jm1.add(jmi1);
jmi1.addActionListener(this);
jmi1.setAccelerator(KeyStroke.getKeyStroke('A',Event.CTRL_MASK,false));
jm1.add(jmi2);
jmi2.addActionListener(this);
jmi2.setAccelerator(KeyStroke.getKeyStroke('M',Event.CTRL_MASK,false));
jm1.add(jmi3);
jmi3.addActionListener(this);
jmi3.setAccelerator(KeyStroke.getKeyStroke('B',Event.CTRL_MASK,false));
jm1.addSeparator();
jm1.add(jm4);
jm1.addSeparator();
jm1.add(jmi4);
jmi4.addActionListener(this);
jmi4.setAccelerator(KeyStroke.getKeyStroke('X',Event.CTRL_MASK,false));
jm2.add(jmi5);
jmi5.addActionListener(this);
jm2.add(jmi6);
jmi6.addActionListener(this);
jm3.add(jmi7);
jmi7.addActionListener(this);
jm4.add(jmiy1);
jmiy1.setAccelerator(KeyStroke.getKeyStroke('U',Event.CTRL_MASK,false));
jmiy1.addActionListener(this);
jm4.add(jmiy2);
jmiy2.setAccelerator(KeyStroke.getKeyStroke('C',Event.CTRL_MASK,false));
jmiy2.addActionListener(this);
jm4.add(jmiy3);
jmiy3.setAccelerator(KeyStroke.getKeyStroke('P',Event.CTRL_MASK,false));
jmiy3.addActionListener(this);
//new Thread(this).start();
}
public static void main(String[] args){
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}catch(UnsupportedLookAndFeelException e){
System.out.print("UnsupportedLookAndFeelException");
}catch(IllegalAccessException e){}catch(InstantiationException e){}catch(ClassNotFoundException e){}
new MainFace();
}
public void actionPerformed(ActionEvent e){
Cursor cu = new Cursor(Cursor.CROSSHAIR_CURSOR);
setCursor(cu);
}
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub }
public void mousePressed(MouseEvent arg0) {
xStart=arg0.getX();
yStart=arg0.getY();
repaint();
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent arg0){
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent arg0){
// TODO Auto-generated method stub
}
public void mouseMoved(MouseEvent arg0){
// TODO Auto-generated method stub
}
public void mouseDragged(MouseEvent arg0){
xEnd=arg0.getX();
yEnd=arg0.getY();
repaint();
}
public void paintComponent(Graphics g){
System.out.println("start已赋值"+"xStart="+xStart+" yStart="+yStart);
System.out.println("End已赋值"+"xEnd="+xEnd+" yEnd="+yEnd);
g.drawLine(xStart, yStart, xEnd, yEnd);
}
}
[/code]
import javax.swing.*;import java.awt.*;
import java.awt.event.*;public class MainFace extends JFrame implements ActionListener, MouseListener,
MouseMotionListener {
int xStart = 0, yStart = 0, xEnd = 0, yEnd = 0;
Container c = this.getContentPane();
JMenuBar jmb = new JMenuBar(); JMenu jm1 = new JMenu("第一次实验");
JMenu jm2 = new JMenu("说明");
JMenu jm3 = new JMenu("帮助"); JMenuItem jmi1 = new JMenuItem("ADD算法画线(A)");
JMenuItem jmi2 = new JMenuItem("中点算法画线(M)");
JMenuItem jmi3 = new JMenuItem("Bresenham算法画线(B)");
JMenuItem jmi4 = new JMenuItem("退出(X)");
JMenu jm4 = new JMenu("演示画线(Y)"); JMenuItem jmiy1 = new JMenuItem("ADD画线演示(U)");
JMenuItem jmiy2 = new JMenuItem("中点画线演示(C)");
JMenuItem jmiy3 = new JMenuItem("Bresenham画线演示(P)");
JMenuItem jmi5 = new JMenuItem("作者(T)");
JMenuItem jmi6 = new JMenuItem("日期和时间"); JMenuItem jmi7 = new JMenuItem("help(E)"); MainFace() {
setLocation(250, 150);
setSize(550, 500);
setTitle("第一次实验");
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addMouseListener(this);
addMouseMotionListener(this); c.setLayout(new BorderLayout());
c.add(jmb, BorderLayout.NORTH); jmb.add(jm1);
jm1.setMnemonic('f');
jm1.addActionListener(this);
jmb.add(jm2);
jm2.setMnemonic('s');
jmb.add(jm3);
jm3.setMnemonic('h'); jm1.add(jmi1);
jmi1.addActionListener(this);
jmi1
.setAccelerator(KeyStroke.getKeyStroke('A', Event.CTRL_MASK,
false));
jm1.add(jmi2);
jmi2.addActionListener(this);
jmi2
.setAccelerator(KeyStroke.getKeyStroke('M', Event.CTRL_MASK,
false));
jm1.add(jmi3);
jmi3.addActionListener(this);
jmi3
.setAccelerator(KeyStroke.getKeyStroke('B', Event.CTRL_MASK,
false));
jm1.addSeparator();
jm1.add(jm4);
jm1.addSeparator();
jm1.add(jmi4);
jmi4.addActionListener(this);
jmi4
.setAccelerator(KeyStroke.getKeyStroke('X', Event.CTRL_MASK,
false)); jm2.add(jmi5);
jmi5.addActionListener(this);
jm2.add(jmi6);
jmi6.addActionListener(this); jm3.add(jmi7);
jmi7.addActionListener(this); jm4.add(jmiy1);
jmiy1.setAccelerator(KeyStroke
.getKeyStroke('U', Event.CTRL_MASK, false));
jmiy1.addActionListener(this);
jm4.add(jmiy2);
jmiy2.setAccelerator(KeyStroke
.getKeyStroke('C', Event.CTRL_MASK, false));
jmiy2.addActionListener(this);
jm4.add(jmiy3);
jmiy3.setAccelerator(KeyStroke
.getKeyStroke('P', Event.CTRL_MASK, false));
jmiy3.addActionListener(this); // new Thread(this).start(); } public static void main(String[] args) {
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (UnsupportedLookAndFeelException e) {
System.out.print("UnsupportedLookAndFeelException");
} catch (IllegalAccessException e) {
} catch (InstantiationException e) {
} catch (ClassNotFoundException e) {
}
new MainFace();
} public void actionPerformed(ActionEvent e) {
Cursor cu = new Cursor(Cursor.CROSSHAIR_CURSOR);
setCursor(cu); } public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub } public void mousePressed(MouseEvent arg0) {
xStart = arg0.getX();
yStart = arg0.getY();
repaint();
} public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
} public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
} public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
} public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
} public void mouseDragged(MouseEvent arg0) {
xEnd = arg0.getX();
yEnd = arg0.getY();
repaint();
} //加入这个方法就好了,因为调用repaint,是调用update,然后调用paint方法,所以
//你的方法就没调用,所以覆盖父类的paint方法,在里面调用你的方法,就行了
@Override
public void paint(Graphics g) {
super.paint(g);
paintComponent(g);
}
public void paintComponent(Graphics g) {
System.out.println("start已赋值" + "xStart=" + xStart + " yStart="
+ yStart);
System.out.println("End已赋值" + "xEnd=" + xEnd + " yEnd=" + yEnd);
g.drawLine(xStart, yStart, xEnd, yEnd);
}
}这样就好了,具体说明见代码中的注释!
face.show(0;
new MainFace();