回 帖 发 新 帖 刷新版面

主题:一个获得鼠标位置的程序

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;


class drawPanel extends JPanel{         //这是一个画板,里面有一个五角星
   public void paint(Graphics g){
        Graphics2D g2=(Graphics2D)g;
        int x1[]={190,218,150,230,162};
        int y1[]={20,100,46,46,100};

        JButton n2=new JButton("111");

        g2.setPaint(Color.red);
        g2.setBackground(Color.cyan);
        GeneralPath polygon2=new GeneralPath(0,x1.length);
        polygon2.moveTo(x1[0],y1[0]);
        for(int index=1;index<x1.length;index++)
        {polygon2.lineTo(x1[index],y1[index]);}
        g2.fill(polygon2);
        }
}
  class draw extends JPanel{          //这是我希望显示坐标的地方
           public void draw(){
            int x,y;
            JPanel pa2=new JPanel();
            JLabel lb1=new JLabel("x:");
            JLabel lb2=new JLabel("y:");
            JLabel lb3=new JLabel("  ");

            JTextField tf1=new JTextField(5);   //在这里显示X
            JTextField tf2=new JTextField(5);   //在这里显示Y
            JTextField tf3=new JTextField(5);

            pa2.add(lb1);
            pa2.add(tf1);
            pa2.add(lb2);
            pa2.add(tf2);
            pa2.add(lb3);
                }
            }

 public class n102112 {
    public n102112(){
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame f1=new JFrame("....");
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        drawPanel pa=new drawPanel();
        draw pa3=new draw();


        pa.setPreferredSize(new Dimension(350,100));
        Container cp1=f1.getContentPane();
        pa.setBackground(Color.cyan);

        cp1.add(pa,BorderLayout.CENTER);
        cp1.add(pa3,BorderLayout.SOUTH);
//        pa3.addMouseMotionListener(this);

        f1.pack();
        f1.setVisible(true);
    }



                    /*public void mouseMoved(MouseEvent e){
                x=e.getX();
                y=e.getY();
                tf1.setText(String.valueOf(x));
                tf2.setText(String.valueOf(y));
                   }*/



        public static void main(String[] args)
        {new n102112();}
    }



  这是我最近编的一个小程序,希望获鼠标在第一个画板内移动时,第二个容器内的文本区能够显示相应的坐标值.
  但,现在这个程序 根本不能显示第二个容器,更别说用那个鼠标移动事件了.

  请各位有能力的帮帮忙!!!

回复列表 (共1个回复)

沙发

做个参考:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.GeneralPath;

import javax.swing.JPanel;
import javax.swing.JTextField;

public class MyPanel extends JPanel implements MouseMotionListener {

    public MyPanel() {
        this.addMouseMotionListener(this);
    }

    JTextField tf1 = new JTextField(5); //在这里显示X

    JTextField tf2 = new JTextField(5); //在这里显示Y
    
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        int x1[] = { 190, 218, 150, 230, 162 };
        int y1[] = { 20, 100, 46, 46, 100 };

        g2.setPaint(Color.red);
        g2.setBackground(Color.cyan);
        GeneralPath polygon2 = new GeneralPath(0, x1.length);
        polygon2.moveTo(x1[0], y1[0]);
        for (int index = 1; index < x1.length; index++) {
            polygon2.lineTo(x1[index], y1[index]);
        }
        g2.fill(polygon2);
                
    }
    
    public void draw(){
        
        this.add(tf1);
        this.add(tf2);
    }

    public void mouseDragged(MouseEvent arg0) {

    }

    public void mouseMoved(MouseEvent arg0) {
        
        tf1.setText(String.valueOf(arg0.getX()));
        tf2.setText(String.valueOf(arg0.getY()));
    }

}

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;

import javax.swing.JFrame;

public class MyTest extends JFrame {
    
    public static void main(String[] args) {
        new MyTest();
    }

    public MyTest() {
        Container con = this.getContentPane();
        MyPanel myPanel = new MyPanel();
        myPanel.draw();

        con.add(myPanel,BorderLayout.CENTER);

        this.setBackground(Color.cyan);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400, 300);
        this.setVisible(true);
    }

}

我来回复

您尚未登录,请登录后再回复。点此登录或注册