Скачиваний:
64
Добавлен:
09.05.2014
Размер:
7.51 Кб
Скачать
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class lab2 extends Applet implements AdjustmentListener, ItemListener,
MouseListener {

double r = 2.0, x = 0, y = 0;
List xField = new List();
List yField = new List();
Scrollbar rField = new Scrollbar(Scrollbar.HORIZONTAL, (int) r, 0, 2, 6);
Label rValue = new Label("r = " + r, Label.CENTER);
private DatagramSocket socket;

Label t;
Panel p;
private static final int IMAGE_WIDTH = 240;
private static final int IMAGE_HEIGHT = IMAGE_WIDTH;
private static final int BUFFER_SIZE = 8 * 3;
public lab2() {
setLayout(new GridLayout(1, 0, 5, 5));
t = new Label();
t.setSize(IMAGE_WIDTH, IMAGE_HEIGHT);
t.setAlignment(Label.CENTER);
t.addMouseListener(this);
add(t);
p = new Panel();
add(p);
initP();
}

public void paint(Graphics g) {
super.paint(g);
g = t.getGraphics();
drawImg(g);
}

private void drawImg(Graphics g) {
g.setClip(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
g.setColor(new Color(241, 243, 248)); // цвет фона...
g.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT); // заливаем фон...
g.setColor(new Color(51, 153, 255)); // цвет фигуры...

g.fillRect(IMAGE_WIDTH / 3, IMAGE_HEIGHT / 6, IMAGE_WIDTH / 6,
IMAGE_HEIGHT / 3 + 1);

Polygon p = new Polygon();
p.addPoint(IMAGE_WIDTH / 6, IMAGE_HEIGHT / 2);
p.addPoint(IMAGE_WIDTH / 2, IMAGE_HEIGHT / 3 * 2);
p.addPoint(IMAGE_WIDTH / 2, IMAGE_HEIGHT / 2);
g.fillPolygon(p);

g.fillArc(IMAGE_WIDTH / 3, IMAGE_HEIGHT / 3, IMAGE_WIDTH / 3,
IMAGE_HEIGHT / 3, -90, 90);

// далее рисуем оси и подписываем их...
g.setColor(Color.black);
g.drawLine(0, IMAGE_HEIGHT / 2, IMAGE_WIDTH, IMAGE_HEIGHT / 2);
g.drawLine(IMAGE_WIDTH / 2, IMAGE_HEIGHT, IMAGE_WIDTH / 2, 0);
g.drawLine(IMAGE_WIDTH - 5, IMAGE_HEIGHT / 2 - 2, IMAGE_WIDTH,
IMAGE_HEIGHT / 2);
g.drawLine(IMAGE_WIDTH - 5, IMAGE_HEIGHT / 2 + 2, IMAGE_WIDTH,
IMAGE_HEIGHT / 2);
g.drawLine(IMAGE_WIDTH / 2 - 2, 5, IMAGE_WIDTH / 2, 0);
g.drawLine(IMAGE_WIDTH / 2 + 2, 5, IMAGE_WIDTH / 2, 0);

g.drawString("x", IMAGE_WIDTH - 5, IMAGE_HEIGHT / 2 - 5);
g.drawString("y", IMAGE_WIDTH / 2 + 5, 5);

String[] s = {"-r", "-r/2", "", "r/2", "r"};
for (int i = 1; i < 6; i++) {
g.drawLine(IMAGE_WIDTH / 2 - 1, i * IMAGE_HEIGHT / 6,
IMAGE_WIDTH / 2 + 1,
i * IMAGE_HEIGHT / 6);

g.drawLine(i * IMAGE_WIDTH / 6, IMAGE_HEIGHT / 2 - 1,
i * IMAGE_WIDTH / 6,
IMAGE_HEIGHT / 2 + 1);
g.drawString(s[i - 1], IMAGE_WIDTH / 2 + 5,
i * IMAGE_HEIGHT / 6 + 5);
g.drawString(s[i - 1], i * IMAGE_WIDTH / 6 - 5,
IMAGE_HEIGHT / 2 - 5);
}
drawDot(g);
}

private void drawDot(Graphics g) {
int dx = IMAGE_WIDTH / 2;
int dy = IMAGE_WIDTH / 2;
double sacleX = IMAGE_WIDTH / 3 / r;
double sacleY = IMAGE_HEIGHT / 3 / r;
dx += x * sacleX;
dy += -y * sacleY;
if (check(x, y, r))
g.setColor(Color.RED);
else
g.setColor(Color.green);
g.fillRect(dx - 1, dy - 1, 3, 3);
}

private void initP() {
for (int i = -3; i <= 5; i++) {
xField.add("" + (double) i);
yField.add("" + (double) i);
}
xField.select(3);
yField.select(3);

GridBagConstraints c = new GridBagConstraints();
GridBagLayout gridbag = new GridBagLayout();
p.setLayout(gridbag);

c.insets = new Insets(5, 5, 5, 5);
c.fill = GridBagConstraints.HORIZONTAL;

addLabel(c, gridbag, "X :");
c.weightx = 0;
c.gridwidth = GridBagConstraints.REMAINDER;
xField.addItemListener(this);
gridbag.setConstraints(xField, c);
p.add(xField);

c.weightx = 2;
c.gridwidth = GridBagConstraints.REMAINDER;
addLabel(c, gridbag, "Y :");
yField.addItemListener(this);
c.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(yField, c);
p.add(yField);

addLabel(c, gridbag, "r :");
c.gridwidth = GridBagConstraints.REMAINDER;
rField.addAdjustmentListener(this);
gridbag.setConstraints(rField, c);
p.add(rField);

c.weightx = 2;
c.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(rValue, c);
p.add(rValue);
}

private void addLabel(GridBagConstraints c, GridBagLayout gridbag,
String caption) {
Label label = new Label(caption, Label.RIGHT);
c.gridwidth = GridBagConstraints.RELATIVE;
gridbag.setConstraints(label, c);
p.add(label);
}

public void adjustmentValueChanged(AdjustmentEvent e) {
r = e.getValue();
rValue.setText("r = " + r);
repaint();
}

public void itemStateChanged(ItemEvent e) {
y = Double.parseDouble(yField.getSelectedItem());
x = Double.parseDouble(xField.getSelectedItem());
repaint();
}

public boolean check(double x, double y, double r) {
try {
if (socket == null) {
socket = new DatagramSocket(9998, InetAddress.getLocalHost());
}

socket.setSoTimeout(1000);

ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream(
BUFFER_SIZE);
DataOutputStream outputStream = new DataOutputStream(outputBuffer);
outputStream.writeDouble(x);
outputStream.writeDouble(y);
outputStream.writeDouble(r);

DatagramPacket sendPacket = new DatagramPacket(outputBuffer.
toByteArray(), outputBuffer.size(),
InetAddress.getLocalHost(), 9999);
socket.send(sendPacket);

byte[] inputBuffer = new byte[1];
DatagramPacket recievePacket = new DatagramPacket(inputBuffer,
inputBuffer.length);
socket.receive(recievePacket);
DataInputStream dataInputStream = new DataInputStream(
new ByteArrayInputStream(inputBuffer, 0, 1));
boolean result = dataInputStream.readBoolean();
return result;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}

public void mouseClicked(MouseEvent e) {
int cx = e.getX() - IMAGE_WIDTH / 2;
int cy = e.getY() - IMAGE_HEIGHT / 2;

double sacleX = IMAGE_WIDTH / 3 / r;
double sacleY = IMAGE_HEIGHT / 3 / r;
x = cx / sacleX;
y = -cy / sacleY;

repaint();
}

public void mousePressed(MouseEvent e) {}

public void mouseReleased(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}
}
Соседние файлы в папке lab3