我的目的是要鼠标每次点击都会与一个固定点画一条线段。比如固定点为(100,100),每次都在一个窗口点一下鼠标,就画出点的这个点与(100,100)之间的线段。可是点击后坐标是得到了,可是没有线段,不知道什么原因,望高手解答。
代码如下:public class Test extends JFrame{
    JButton button=new JButton("DrawLine");
    MyPanel panel=new MyPanel();
    MyMouse mouse1=new MyMouse();
    
    public Test(){
     panel.add(button);
     this.setSize(500,500);
     this.setVisible(true);
     this.addMouseListener(mouse1);
    }
public static void main(String[] args) {
       new Test();
} Point point=new Point();
public class MyPanel extends JPanel{
public void paint(Graphics g){
super.paint(g);
g.drawLine(Double.valueOf(point.getX()).intValue(),
Double.valueOf(point.getY()).intValue(),100,100);
}
}
public class MyMouse implements MouseListener{
public void mouseClicked(MouseEvent e){
int x1=e.getX();
int y1=e.getY();
point.setX(x1);
point.setY(y1);
panel.repaint();
}
}
}

解决方案 »

  1.   

    你定义的panel都没有add进JFrame中,你叫它怎么给你画图
      

  2.   

    package squall.test;import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class Test extends JFrame
    {
    JButton button = new JButton("DrawLine"); MyPanel panel = new MyPanel(); MyMouse mouse1 = new MyMouse(); public Test()
    {
    panel.add(button);
    this.setSize(500, 500);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setTitle("DrawLine");
    this.add(panel);
    this.addMouseListener(mouse1);
    } public static void main(String[] args)
    {
    new Test();
    } Point point = new Point(); public class MyPanel extends JPanel
    {
    public void paint(Graphics g)
    {
    super.paint(g);
    g.drawLine(Double.valueOf(point.getX()).intValue(), Double.valueOf(
    point.getY()).intValue(), 100, 100);
    }
    } public class MyMouse implements MouseListener
    {
    public void mouseClicked(MouseEvent e)
    {
    int x1 = e.getX();
    int y1 = e.getY();
    point.setLocation(x1,y1);
    panel.repaint();
    } @Override
    public void mouseEntered(MouseEvent e)
    {
    // TODO Auto-generated method stub

    } @Override
    public void mouseExited(MouseEvent e)
    {
    // TODO Auto-generated method stub

    } @Override
    public void mousePressed(MouseEvent e)
    {
    // TODO Auto-generated method stub

    } @Override
    public void mouseReleased(MouseEvent e)
    {
    // TODO Auto-generated method stub

    }

    }
    }
    你原来写的实在错的太多了,自己比较下吧
      

  3.   


    import javax.swing.JFrame;/*
     * Created on 2008/03/11
     */public class testFrame1 {
        public static void main(String[] args) {        JFrame frame = new testFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }}import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;/*
     * Created on 2008/03/11
     */public class testFrame extends JFrame{
        private int DEFAULT_WIDTH = 500;
        private int DEFAULT_HEIGHT = 500;
        private JButton button;
        private MyPanel panel;
        private MyMouse mouse1;
        private Point point;
        public testFrame()
        {
            setTitle("線段");
            setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
            button = new JButton("DrawLine");
            panel = new MyPanel();
            point = new Point();
            mouse1 = new MyMouse();
            add(panel,BorderLayout.CENTER);
            panel.add(button);
            button.addMouseListener(mouse1);
        }
        public class MyPanel extends JPanel {        public void paint(Graphics g) {            super.paint(g);
                g.drawLine(Double.valueOf(point.getX()).intValue(), Double.valueOf(point.getY())
                    .intValue(), 100, 100);
            }
        }
        public class MyMouse implements MouseListener{        public void mouseClicked(MouseEvent e) {            int x1 = e.getX();
                int y1 = e.getY();
                point.setLocation(x1, y1);
                panel.repaint();
            }        public void mouseEntered(MouseEvent e) {        }        public void mouseExited(MouseEvent e) {        }        public void mousePressed(MouseEvent e) {        }        public void mouseReleased(MouseEvent e) {        }    }
    }
      

  4.   

    你先加button,再加panel,自己看吧
      

  5.   

    你这个就不该用button,直接作个鼠标事件,点击哪都连接(100,100)作线段。这样写完,效果你自己看,我那个是两个文件,明子和你的不一样,二楼那个把顺序和设置改下,基本就没问题了。
      

  6.   


    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.util.ArrayList;
    import javax.swing.*;public class Test {    public static void main(String[] args) {
            TestFrame frame = new TestFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
         }}class TestFrame extends JFrame {
        public TestFrame() {
            setTitle("Test");
            
            Toolkit kit = Toolkit.getDefaultToolkit();
            Dimension screenSize = kit.getScreenSize();
            int screenWidth = screenSize.width;
            int screenHeight = screenSize.height;
            
            setSize(screenWidth / 2, screenHeight / 2);
            setLocation(screenWidth / 4, screenHeight / 4);
            
            TestPanel panel = new TestPanel();
            add(panel);
        }
    }class TestPanel extends JPanel {
        public TestPanel() {
            squares = new ArrayList<Line2D>();
            current = null;
            
            addMouseListener(new MouseHandler());
        }
        
        @Override
        public void paint(Graphics g) { 
            super.paint(g);
            
            Graphics2D g2 = (Graphics2D) g;
            
            for (Line2D l : squares)
                g2.draw(l);
        }
        
        public void add(Point2D p) {
            double x =p.getX();
            double y = p.getY();
            current = new Line2D.Double(DEFAULT_X, DEFAULT_Y, x, y);
            squares.add(current);
        }
        
        private class MouseHandler extends MouseAdapter {
            @Override
            public void mouseClicked(MouseEvent event) {
                add(event.getPoint());
                repaint();
            }
        }
        
        private Line2D current;
        private ArrayList<Line2D> squares;
        private static final int DEFAULT_X = 100;
        private static final int DEFAULT_Y = 100;
    }
      

  7.   

    import java.awt.BorderLayout;
    最上面加上这行。
    public Test()
        {
            this.setSize(500, 500);
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setTitle("DrawLine");
            add(panel,BorderLayout.CENTER);
            panel.add(button);
            this.addMouseListener(mouse1);
        }
    test 方法改成这样