我想实现的结果就是,我用数组分别存储了位置信息和文字信息.现在我已经到的就是,利用这些位置信息绘制矩形,利用鼠标事件实现,当选择其中矩形的时候,矩形变成红色,里面其中包括了矩形的位置信息的判断.遇到了难题,就是我想把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]);
}
}
}
}
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]);
}
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货