Добавил:
Eatmore
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:отчеты по лабораторным работам / лабораторная работа 3 / MainFrame / src / mainframe / DrawFrame
.java 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); // Добавляем компонент р в контейнер
}
}
}
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