В примере показано, как во время выполнения программы можно изменять свойства объекта TShape . Изменение цвета объекта - событие OnChange для ColorGrid1.
Листинг 7. Graph.java - выбор фигуры
----------------------------------------------------------------
// Импортируем пакеты классов
import java.awt.*; // элементы граф. интерфейса
import java.applet.*;// апплеты
import java.awt.event.*;// обработчик событий
public class Graph extends Applet
implements MouseListener, ItemListener {
//Цвета квадратиков с цветом...
Color colors[]={Color.black,new Color (156,48,27),
new Color (25,148,5),new Color (139,127,10),
new Color (44,32,139),new Color (138,28,135),
new Color (80,143,126),new Color (199,199,199),
Color.gray,Color.red,new Color (144,244,63),
Color.yellow,Color.blue,new Color (235,92,183),
new Color (119,234,233),Color.white};
int X,Y;
Color clr;
CheckboxGroup t;//группа флажков...
Checkbo x cir,ell,rec;//Флажки, являющие собой круг,
// эллипс и прямоугольник соответственно...
//Сетка координат...
int coordsX[]={33,66,99,132,152+13};
int coordsY[]={33,66,99,132,152+13};
public void init () {
setLayout(null);
setBackground (new Color (25,148,178));
this.addMouseListener(this);
clr=Color.black;
t=new CheckboxGroup ();
cir=new Checkbox ("Circle",t,false);
ell=new Checkbox ("Ellipse",t,false);
rec=new Checkbox ("Rectangle",t,false);
add (cir);
add (ell);
add (rec);
cir.addItemListener(this);
ell.addItemListener(this);
rec.addItemListener(this);
cir.reshape(203, 33, 100, 23);
ell.reshape(203, 73, 100, 23);
rec.reshape(203, 115, 100, 23);
Label autor=new Label ("(c) 2006. Khramkov Ivan...");
autor.setBounds(23,373,333,33);
add (autor);
}
public void paint(Graphics g){
g.setColor(Color.black);
g.drawRect(23,23,147,163);
g.drawLine(23,159,170,159);
g.drawRect(193,23,147,163);
g.drawRect(73,193,210,173);
g.drawString("Now color:",29,177);
g.fillRect(93,167,53,15);
g.drawRect(93,167,53,15);
g.setColor(new Color(25,148,178));
g.fillRect(74,194,207,167);
int i,j;
int k=0;
int step1=0;
int step2=0;
// Рисование сетки цветов (квадратиков с цветом)...
for (i=0;i<=3;i++)
{
step1=step1+33;
for (j=0;j<=3;j++)
{
step2=step2+33;
g.setColor(colors[k]);
g.fillRect(step1,step2,20,20);
g.setColor(Color.black);
g.drawRect(step1-1,step2-1,22,22);
k++;
}
step2=0;
}
coordsX[4]=10000;
}
// Функция рисует отмеченную фигуру с цветом color...
public void drawObj(Color color)
{
Graphics img=getGraphics ();
paint (img);
img.setColor(color);
img.fillRect(93,167,53,15);
boolean chst=cir.getState();
if (chst)//если выбран круг...
img.fillArc(103,203, 153, 153, 0, 360);
chst=ell.getState();
if (chst) //если выбран эллипс...
img.fillArc(93,223, 173, 123, 0, 360);
chst=rec.getState();
if (chst)//если выбран прямоугольник...
img.fillRect(93,223,169,123);
img.setColor(Color.black);
img.drawRect(93,167,53,15);
}
// Функция определяет, щелкнули ли по квадратику с цветом...
// Если да - вызывает функцию drawObj(clr),
// где clr - цвет квадратика, по которому щелкнули...
public void mousePressed(MouseEvent me)
{
X = me.getX();
Y = me.getY();
int i,j;
Graphics g=getGraphics ();
for (i=0;i<=3;i++)
for (j=0;j<=3;j++)
if (X>=coordsX[i] & X<coordsX[i+1]-13 &
Y>=coordsY[j] & Y<coordsY[j+1]-13 & X<=152)
{
g.setColor(new Color(167,148,142));
clr=colors[4*i+j];
drawObj(clr);
break ;
}
}
//Функция, реагирующая на выбор флажка...
public void itemStateChanged (ItemEvent ie)
{
drawObj(clr);
}
public void mouseReleased(MouseEvent e) {;}
public void mouseClicked(MouseEvent e) {;}
public void mouseEntered(MouseEvent e) {;}
public void mouseExited(MouseEvent e) {;}
}
Листинг Graph.html
---------------------------------------------------------
<html ><title >Khramkov Ivan presents...</title >
<body bgcolor =#FFFFFF>
<center >
<font color =#FFFFFF>
<h1 >Move the Colors...</h1 >
<br >
</font >
<applet code =Graph.class width =365 height =403></applet >
</center >
</body ></html >