import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MouseMove extends JFrame{
 int[] a={100,200,300};
 int[] b={50,150,250};
 int[] c={50,50,50};
 int[] d={50,50,50};
 int i;
 String[] e={"显示第一个","显示第二个","显示第三个"};
 public MouseMove(){
 }
 public void paint(Graphics g){ 
  for(i=0;i<3;i++){
     g.drawRect(a[i], b[i], c[i], d[i]);
  }
 }
public static void main(String[] args){
  MouseMove jf=new MouseMove();
  Container ct=null;
  JPanel jp=new JPanel();
  final JTextField jt=new JTextField();
  ct=jf.getContentPane();
  ct.add(jp,BorderLayout.CENTER);
  ct.add(jt,BorderLayout.NORTH);
    jp.addMouseListener(new MouseListener(){
   public void mouseEntered(MouseEvent e) {
     }
   public void mousePressed(MouseEvent e)
  {
   int x=e.getX();
   int y=e.getY();
   if(100<x && x<150 && y>150 && y<200){
    jt.setText("Mouse Entered");
   }
   else{
    jt.setText("我");
   }
   }
   public void mouseExited(MouseEvent e) {
     }
    public void mouseReleased(MouseEvent e) {
    }
    public void mouseClicked(MouseEvent e) {}
    
   });
  jf.setSize(600, 400);
  jp.setSize(600, 400);
  jf.setVisible(true);
 }

以上是我的程序,运行没有问题,但是我不知道下面该怎么实现,我要求的是利用a[i],b[i],c[i],d[i]来画一个矩形,在鼠标事件中,利用坐标的关系,达到当我的鼠标在其中一个矩形区域的时候,把相应的e[i],显示到文本框中.
我想要的结果就是利用i来判断的,在判断的时候,首先要判断鼠标落在那一个矩形区域,此时取出i的指,然后根据i的指取出e[i],并把它显示出来.
谢谢各位高手!!

解决方案 »

  1.   

    首先,lz是否会取得鼠标的当前位置?如果不会,可以参考MouseMove事件。
    其次,lz获得了鼠标当前位置,是否会判断它在不在或者在哪一个矩形中?只需要判断当前的鼠标的横坐标和纵坐标是否分别位于某个矩形的范围内就行了,用循环做。
    最后,得到了i,就去取e[i],就ok。如果没有得到i,就不取。
      

  2.   


    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;public class MouseMove extends JFrame {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    int[] a = { 100, 200, 300 };
    int[] b = { 50, 150, 250 };
    int[] c = { 50, 50, 50 };
    int[] d = { 50, 50, 50 };
    String[] str = { "显示第一个", "显示第二个", "显示第三个" };
    JPanel jp = new MyJPanel();
    final JTextField jt = new JTextField();

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

    public MouseMove(){
    add(jp, BorderLayout.CENTER);
    add(jt, BorderLayout.NORTH);
    // jp.addMouseListener(new MouseAdapter() {
    // public void mousePressed(MouseEvent e) {
    // int x = e.getX();
    // int y = e.getY();
    // if (100 < x && x < 150 && y > 150 && y < 200) {
    // jt.setText("Mouse Entered");
    // } else {
    // jt.setText("我");
    // }
    // }
    // });
    jp.addMouseMotionListener(new MouseMotionAdapter(){
    @Override
    public void mouseMoved(MouseEvent e) {
    int x=e.getX();
    int y=e.getY();
    if(x>=100&&x<=150&&y>=50&&y<=100){
    jt.setText(str[0]);
    }else if(x>=200&&x<=250&&y>=150&&y<=200){
    jt.setText(str[1]);
    }else if(x>=300&&x<=350&&y>=250&&y<=300){
    jt.setText(str[2]);
    }else{
    jt.setText("");
    }
    }

    });
    setSize(600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    }

    class MyJPanel extends JPanel{
    @Override
    public void paint(Graphics g) {
    for(int i=0;i<3;i++){
    g.drawRect(a[i], b[i], c[i], d[i]);
    }
    }
    }
    }在判断的时候,首先要判断鼠标落在那一个矩形区域,此时取出i的指,然后根据i的指取出e[i],并把它显示出来. 
    想不通为什么要这样做,在你判断鼠标落在某个区域时,是根据当前鼠标的x和y的值,和所画的矩形的坐标相比较得到的,那这时应该是设置i的值,而不是取出i的值
      

  3.   

    上面没理解你的意思,下面改了下import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;public class MouseMove extends JFrame {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    int[] a = { 100, 200, 300 };
    int[] b = { 50, 150, 250 };
    int[] c = { 50, 50, 50 };
    int[] d = { 50, 50, 50 };
    String[] str = { "显示第一个", "显示第二个", "显示第三个" };
    JPanel jp = new MyJPanel();
    final JTextField jt = new JTextField();

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

    public MouseMove(){
    add(jp, BorderLayout.CENTER);
    add(jt, BorderLayout.NORTH);
    jp.addMouseMotionListener(new MouseMotionAdapter(){
    @Override
    public void mouseMoved(MouseEvent e) {
    int x=e.getX();
    int y=e.getY();
    // if(x>=100&&x<=150&&y>=50&&y<=100){
    // jt.setText(str[0]);
    // }else if(x>=200&&x<=250&&y>=150&&y<=200){
    // jt.setText(str[1]);
    // }else if(x>=300&&x<=350&&y>=250&&y<=300){
    // jt.setText(str[2]);
    // }else{
    // jt.setText("");
    // }
    for(int i=0;i<3;i++){
    if(x>=a[i]&&x<=(a[i]+c[i])&&y>=b[i]&&y<=(b[i]+d[i])){
    jt.setText(str[i]);
    }
    }
    }

    });
    setSize(600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    }

    class MyJPanel extends JPanel{
    @Override
    public void paint(Graphics g) {
    for(int i=0;i<3;i++){
    g.drawRect(a[i], b[i], c[i], d[i]);
    }
    }
    }
    }
      

  4.   

    对,就是这样的.
    import java.awt.*;
    import java.awt.event.*;
    import java.util.ArrayList;
    import java.util.List;  
    import javax.swing.*;
    import java.util.Arrays; public class MouseMove extends JFrame{
        int[] a=new int[]{100,200,300,99};
    int[] b=new int[]{50,150,250,49};
    int[] c=new int[]{50,50,50,80};
    int[] d=new int[]{50,50,50,80};
    int i;
    String[] e=new String[]{"显示第一个","显示第二个","显示第三个"};
    int[] f=new int[]{150,250,350,179};
    int[] g=new int[]{100,200,300,129};
    public MouseMove(){
    }
    public void paint(Graphics g){ 
    for(i=0;i<4;i++){
       g.drawRect(a[i], b[i], c[i], d[i]);
    }
    }
    public static void main(String[] args){
      MouseMove jf=new MouseMove();
      Container ct=null;
      JPanel jp=new JPanel();
      final JTextField jt=new JTextField();
      ct=jf.getContentPane();
      ct.add(jp,BorderLayout.CENTER);
      ct.add(jt,BorderLayout.NORTH);
      jp.addMouseListener(new MouseListener(){
      public void mouseEntered(MouseEvent e) {
       }
      public void mousePressed(MouseEvent e)
    {
        int[] a=new int[]{100,200,300,99};
    int[] b=new int[]{0,100,200,0};
    int[] f=new int[]{150,250,350,179};
    int[] g=new int[]{50,150,250,79};
    String[] l=new String[]{"显示第一个","显示第二个","显示第三个","显示第四个"};
    int x=e.getX();
    int y=e.getY();
    int k=0;
    int m=0;
    ArrayList list = new ArrayList();
    for(int j=0;j<4;j++){
    if(a[j]<x && x<f[j] && y>b[j] && y<g[j]){
    list.add(j);
    Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
    k++;
    if(k==1)
    jt.setText(l[j]);
    else if(k==2){
    int a1=nums[0];
    int a2=nums[1];
    if(f[a1]<f[a2])
    jt.setText(l[a1]);
    else
    jt.setText(l[a2]);
    }
    else
    jt.setText("");
    }
    else{
    }
    }  
    }
      public void mouseExited(MouseEvent e) {
       }
       public void mouseReleased(MouseEvent e) {
       int x=e.getX(); 
        int y=e.getY(); 
        String s="当前坐标为:"+x+','+y; 
        jt.setText(s); 
       }
       public void mouseClicked(MouseEvent e) {}
       
      });
      jf.setSize(600, 400);
      jp.setSize(600, 400);
      jf.setVisible(true);
     }

    这是我的代码,在里面添加了关于两个矩形重叠的情况,这个时候,如果我要在选择一个矩形框的时候,让矩形框变颜色怎么实现,我对reprint事件不是很了解.