我想实现的结果就是,我用数组分别存储了位置信息和文字信息.现在我已经到的就是,利用这些位置信息绘制矩形,利用鼠标事件实现,当选择其中矩形的时候,矩形变成红色,里面其中包括了矩形的位置信息的判断.遇到了难题,就是我想把2个矩形框子或者多个矩形框子合并.前提是我选中其中一个矩形框,按shift键,在选择另一个矩形框(当然选择的时候框子也变红色),此时选择一个合并按钮,选中的矩形合并成一个矩形.就是判断起左边,上边,下边和右边的坐标,取最大值.同时原来的矩形框就消失了.不知道该怎么实现.请帮帮忙.附代码.下面是我现在所实现的代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;public class RectChoos extends JFrame {
 private static final long serialVersionUID = 1L;
 int[] a = { 100, 200, 300, 99 , 47, 199, 350};
 int[] b = { 50, 150, 250, 49 , 37, 149, 300};
 int[] c = { 50, 50, 50, 80 , 40, 80, 60};
 int[] d = { 50, 50, 50, 80 , 40, 80, 60};
 String[] str = { "显示第一个", "显示第二个", "显示第三个", "显示第四个","显示第五个","显示第六个" ,"显示第七个"};
 JPanel jp = new MyJPanel();
 int selected=-1;
 final JTextField jt = new JTextField(); public static void main(String[] args) {
  new RectChoos();
 } public RectChoos() {
  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();
    ArrayList list = new ArrayList();
    int k = 0;
    for (int i = 0; i < 7; i++) {
     if (x >= a[i] && x <= (a[i] + c[i]) && y >= b[i]
       && y <= (b[i] + d[i])) {
      list.add(new Integer(i));
      Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
      k++;
      if (k == 1){
       jt.setText(str[i]);
       selected=i;
       repaint();
      }
      else if (k == 2) {
       int a1 =nums[0].intValue();
       int a2 = nums[1].intValue();
       if ((a[a1] + c[a1]) < (a[a2] + c[a2])){
        jt.setText(str[a1]);
        selected=a1; 
        repaint();
       }
       else{
        jt.setText(str[a2]);
        selected=a2; 
        repaint();
       }
      }
     }
    }
   }  });
  setSize(800, 600);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setVisible(true);
 } class MyJPanel extends JPanel {
     private static final long serialVersionUID = -724828842932429886L;
  public void paint(Graphics g) {
   for (int i = 0; i < 7; i++) {
    System.out.println(selected);
    if(selected==i)
     g.setColor(Color.red);
    else
     g.setColor(Color.black);
    g.drawRect(a[i], b[i], c[i], d[i]);
   }
  }
 }

解决方案 »

  1.   

    楼主我教你怎么贴代码:
    1、将代码进行良好的格式化,以方便阅读。
    2、在发帖文本框的上方单击“#”按钮,选择 Java
    3、将代码粘贴到【code=Java】和【/code】之间。发出来的帖子就会是下面的效果:public class Hello {    // 程序入口
        public static void main(String[] args) {
            System.out.println("Hello!");
        }
    }
      

  2.   


    import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Graphics; 
    import java.awt.event.MouseAdapter; 
    import java.awt.event.MouseEvent; 
    import java.util.ArrayList; import javax.swing.JFrame; 
    import javax.swing.JPanel; 
    import javax.swing.JTextField; public class RectChoos extends JFrame { 
    private static final long serialVersionUID = 1L; 
    int[] a = { 100, 200, 300, 99 , 47, 199, 350}; 
    int[] b = { 50, 150, 250, 49 , 37, 149, 300}; 
    int[] c = { 50, 50, 50, 80 , 40, 80, 60}; 
    int[] d = { 50, 50, 50, 80 , 40, 80, 60}; 
    String[] str = { "显示第一个", "显示第二个", "显示第三个", "显示第四个","显示第五个","显示第六个" ,"显示第七个"}; 
    JPanel jp = new MyJPanel(); 
    int selected=-1; 
    final JTextField jt = new JTextField(); public static void main(String[] args) { 
      new RectChoos(); 
    } public RectChoos() { 
      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(); 
        ArrayList list = new ArrayList(); 
        int k = 0; 
        for (int i = 0; i < 7; i++) { 
        if (x >= a[i] && x <= (a[i] + c[i]) && y >= b[i] 
          && y <= (b[i] + d[i])) { 
          list.add(new Integer(i)); 
          Integer[] nums = (Integer[]) list.toArray(new Integer[0]); 
          k++; 
          if (k == 1){ 
          jt.setText(str[i]); 
          selected=i; 
          repaint(); 
          } 
          else if (k == 2) { 
          int a1 =nums[0].intValue(); 
          int a2 = nums[1].intValue(); 
          if ((a[a1] + c[a1]) < (a[a2] + c[a2])){ 
            jt.setText(str[a1]); 
            selected=a1; 
            repaint(); 
          } 
          else{ 
            jt.setText(str[a2]); 
            selected=a2; 
            repaint(); 
          } 
          } 
        } 
        } 
      }   }); 
      setSize(800, 600); 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      setVisible(true); 
    } class MyJPanel extends JPanel { 
        private static final long serialVersionUID = -724828842932429886L; 
      public void paint(Graphics g) { 
      for (int i = 0; i < 7; i++) { 
        System.out.println(selected); 
        if(selected==i) 
        g.setColor(Color.red); 
        else 
        g.setColor(Color.black); 
        g.drawRect(a[i], b[i], c[i], d[i]); 
      } 
      } 

    }
      

  3.   

    import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Graphics; 
    import java.awt.event.MouseAdapter; 
    import java.awt.event.MouseEvent; 
    import java.util.ArrayList; 
      

  4.   

    很想帮你,可惜公司没有java环境