Скачиваний:
66
Добавлен:
09.05.2014
Размер:
5.17 Кб
Скачать
package mainframe;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.swing.*;
import java.net.*;

enum States { InArea, NotInArea, NoResponse };

// Фрейм для рисования области
public class DrawFrame extends JApplet {

static final int DEFAULT_WIDTH = getMonWidth();
static final int DEFAULT_HEIGHT = getMonHeight();
static int iterator;
NPanel panel = new NPanel();
DrawComponent component = new DrawComponent();
Socket socket;
private double x;
private double y;
private double R;
private States state;

public void init() {
component.addMouseListener(new MouseHandler()); // Создание обработчика
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // Размер фрейма

add(component, BorderLayout.CENTER); // Добавление компонента к фрейму
add(panel, BorderLayout.WEST); // Добавление панели к фрейму

panel.jButton1.addActionListener(new ButtonAction()); // Связывание обработчика с кнопкой

R = 3;

setVisible(true);
}

// Определение ширины экрана
protected static int getMonWidth() {
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize(); // Возращает размер экрана в виде объекта Dimension
int screenWidth = screenSize.width;
return screenWidth;
}

// Определение высоты экрана
protected static int getMonHeight() {
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenHeight = screenSize.height - screenSize.height / 20;
return screenHeight;
}

private void isInAreaRequest() {
DataInputStream dis;
DataOutputStream dos;
try {
socket = new Socket(InetAddress.getLocalHost(), 7070);
socket.setSoTimeout(50);
dis = new DataInputStream(socket.getInputStream());
dos = new DataOutputStream(socket.getOutputStream());

dos.writeDouble(x);
dos.writeDouble(y);
dos.writeDouble(R);

if (dis.readBoolean()) {
state = States.InArea;
} else {
state = States.NotInArea;
}

dos.close();
dis.close();
socket.close();
} catch (UnknownHostException e) {
state = States.NoResponse;
} catch (IOException e) {
state = States.NoResponse;
}

switch (state) {
case InArea:
panel.jLabel8.setText("Point is in area");
break;
case NotInArea:
panel.jLabel8.setText("Point is not in area");
break;
case NoResponse:
panel.jLabel8.setText("Server does not response");
break;
}
}

private class MouseHandler extends MouseAdapter {

public void mousePressed(MouseEvent event) // Реакция на нажатие левой кнопки на мыши
{
panel.drawKoord(event.getPoint(), component);

x = panel.setDecX(event.getPoint().getX(), component);
y = panel.setDecY(event.getPoint().getY(), component);

Point2D p = new Point2D.Double(event.getPoint().getX(), event.getPoint().getY());
isInAreaRequest();
component.add(p, state);
}
}
// Когда кнопка нажата, устанавливаем точку

private class ButtonAction implements ActionListener {

public void actionPerformed(ActionEvent event) {

String jTextX = panel.jTextField4.getText();
String jTextY = panel.jTextField5.getText();
String jTextR = panel.jTextField3.getText();


try {
x = Double.parseDouble(jTextX);
y = Double.parseDouble(jTextY);
R = Double.parseDouble(jTextR);
if (R <= 0) {
panel.jLabel8.setText("R must be positive!");
return;
}
} catch (NumberFormatException e) {
panel.jLabel8.setText("It's not a real number!");
return;
}


panel.jTextField1.setText(jTextX);
panel.jTextField2.setText(jTextY);

panel.setOldLogicRad(panel.getLogicRad());

panel.setLogicRad(R);
component.repaintPoints(panel);

Point2D p =
new Point2D.Double(panel.setPixelX(Double.parseDouble(jTextX), component),
panel.setPixelY(Double.parseDouble(jTextY), component));
isInAreaRequest();
component.add(p, state); // Добавляем компонент р в контейнер
}
}
}

Соседние файлы в папке mainframe