先看下代码,我想实现的就是,利用鼠标事件,当选择其中一个矩形框的时候,使得矩形框变成红色,并且把其对应的内容给显示出来,其中关于内容的显示部分已经完成,就是下面代码.关于当选择一个矩形框的时候使得矩形眶变成红色,我做不好,关于绘制部分很不熟悉,请各位帮忙.谢谢了!
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseAdapter;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField; public class RectChoose extends JFrame {
private static final long serialVersionUID = 1L;
int[] a = { 100, 200, 300 ,99};
int[] b = { 50, 150, 250 ,49};
int[] c = { 50, 50, 50 ,80};
int[] d = { 50, 50, 50 ,80};
String[] str = { "显示第一个", "显示第二个", "显示第三个" ,"显示第四个"};
JPanel jp = new MyJPanel();
final JTextField jt = new JTextField();
public static void main(String[] args) {
new RectChoose();
}
public RectChoose(){
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<4;i++){
if(x>=a[i]&&x<=(a[i]+c[i])&&y>=b[i]&&y<=(b[i]+d[i])){
list.add(i);
Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
k++;
if(k==1)
jt.setText(str[i]);
else if(k==2){
int a1=nums[0];
int a2=nums[1];
if((a[a1]+c[a1])<(a[a2]+c[a2]))
jt.setText(str[a1]);
else
jt.setText(str[a2]);
}
}
}
}
});
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
class MyJPanel extends JPanel{
public void paint(Graphics g) {
for(int i=0;i<4;i++){
g.drawRect(a[i], b[i], c[i], d[i]);
}
}
}
}
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseAdapter;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField; public class RectChoose extends JFrame {
private static final long serialVersionUID = 1L;
int[] a = { 100, 200, 300 ,99};
int[] b = { 50, 150, 250 ,49};
int[] c = { 50, 50, 50 ,80};
int[] d = { 50, 50, 50 ,80};
String[] str = { "显示第一个", "显示第二个", "显示第三个" ,"显示第四个"};
JPanel jp = new MyJPanel();
final JTextField jt = new JTextField();
public static void main(String[] args) {
new RectChoose();
}
public RectChoose(){
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<4;i++){
if(x>=a[i]&&x<=(a[i]+c[i])&&y>=b[i]&&y<=(b[i]+d[i])){
list.add(i);
Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
k++;
if(k==1)
jt.setText(str[i]);
else if(k==2){
int a1=nums[0];
int a2=nums[1];
if((a[a1]+c[a1])<(a[a2]+c[a2]))
jt.setText(str[a1]);
else
jt.setText(str[a2]);
}
}
}
}
});
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
class MyJPanel extends JPanel{
public void paint(Graphics g) {
for(int i=0;i<4;i++){
g.drawRect(a[i], b[i], c[i], d[i]);
}
}
}
}
另外建议楼主用J2D对象绘制矩形,不然代码太乱。import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import java.util.ArrayList;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;public class RectChoose extends JFrame {
private static final long serialVersionUID = 5616139155213961945L;
private int chooseIndex;
int[] a = { 100, 200, 300, 99 };
int[] b = { 50, 150, 250, 49 };
int[] c = { 50, 50, 50, 80 };
int[] d = { 50, 50, 50, 80 };
String[] str = { "显示第一个", "显示第二个", "显示第三个", "显示第四个" };
JPanel jp = new MyJPanel();
final JTextField jt = new JTextField(); public static void main(String[] args) {
new RectChoose();
} public RectChoose() {
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<Integer> list = new ArrayList<Integer>();
int k = 0;
for (int i = 0; i < 4; i++) {
if (x >= a[i] && x <= (a[i] + c[i]) && y >= b[i]
&& y <= (b[i] + d[i])) {
list.add(i);
Integer[] nums = (Integer[]) list
.toArray(new Integer[0]);
k++;
if (k == 1) {
chooseIndex = i;
} else if (k == 2) {
int a1 = nums[0];
int a2 = nums[1];
chooseIndex = (a[a1] + c[a1]) < (a[a2] + c[a2]) ? a1 : a2;
}
jt.setText(str[chooseIndex]);
repaint();
}
}
} });
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
} class MyJPanel extends JPanel {
private static final long serialVersionUID = -724828842932429886L;
private Color chooseColor = Color.red;
public void paint(Graphics g) {
for (int i = 0; i < 4; i++) {
if (i == chooseIndex) {
Color oldColor = g.getColor();
g.setColor(chooseColor);
g.drawRect(a[i], b[i], c[i], d[i]);
g.setColor(oldColor);
} else {
g.drawRect(a[i], b[i], c[i], d[i]);
}
}
}
}
}
这样:import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;public class Rect {
private Rectangle r;
private Color c;
public Rect(int x, int y, int width, int height, Color c) {
this(new Rectangle(x, y, width, height), c);
}
public Rect(Rectangle r, Color c) {
this.r = r;
this.c = c;
}
public void draw(Graphics g) {
Color oldColor = g.getColor();
g.setColor(c);
g.drawRect(r.x, r.y, r.width, r.height);
g.setColor(oldColor);
}
}用法我就不说了,很简单。