Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Индивидуальное Задание Java.docx
Скачиваний:
1
Добавлен:
31.08.2024
Размер:
420.71 Кб
Скачать

Import java.Util.ArrayList;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.*;

import java.awt.*;

public class NewDraw extends JPanel {

private String title = null;

private ArrayList<Double> data = new ArrayList<>();

private ArrayList<Integer> dataInt = new ArrayList<>();

public NewDraw(String title, CountryData data) {

this.title = title;

this.data = data.getData();

this.dataInt = convertToInt(this.data);

}

public ArrayList<Integer> convertToInt(ArrayList<Double> data){

ArrayList<Integer> dataInt = new ArrayList<>();

double number = 0.0;

for(int i = 0; i < data.size(); i++) {

number = data.get(i);

dataInt.add((int) number);

}

return dataInt;

}

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

int xStep = 50;

int yStep = 28;

int width = getWidth();

//int width = 1000;

////System.out.println("width: " + width);

int height = getHeight();

//int height = 500;

////System.out.println("height " + height);

double minX = 1.0;

double maxX = (double) data.size();

double min = Double.MAX_VALUE;

double max = Double.MIN_VALUE;

for (int i = 0; i < data.size(); i++) {

min = Math.min(min, data.get(i));

max = Math.max(max, data.get(i));

}

/*

System.out.println("minX: " + minX);

System.out.println("maxX: " + maxX);

System.out.println("minY: " + minYAL);

System.out.println("maxY: " + maxYAL);

System.out.println("minZ: " + minYLL);

System.out.println("maxZ: " + maxYLL);

*/

//int xStepTwo = 1;

//int collectionLength = COLLECTION_SIZES.length;

//Определение масштаба для отображения графика

double xScale = (width - xStep) / maxX;

int graphWidth = width - xStep * 2;

int graphHeight = (int) ((height - 60) + (0.1 / xScale));

//int graphHeight = height - xStep;

double yScaleAL = (graphHeight / (max - min));

////System.out.println("yScale: " + yScaleAL);

double yScaleLL = (graphHeight / (max - min));

////System.out.println("zScale: " + yScaleLL);

//Перевод координат в пиксели

int[] xPixels = new int[data.size()];

int[] yPixelsAL = new int[data.size()];

//int[] yPixelsLL = new int[timeCollectionLL.length];

for (int i = 0; i < data.size(); i++) {

//System.out.println("Точка: " + i);

xPixels[i] = (int) (i * xScale) + xStep;

//System.out.println("Координата х: " + (xPixels[i] - xStep));

yPixelsAL[i] = (int) ((max - data.get(i)) * yScaleAL);

//System.out.println("addTotalTimeAL: " + timeCollectionAL[i]);

//System.out.println("Координата у: " + yPixelsAL[i]);

}

//g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

//Перекрас пространства для графика

g2.setColor(Color.WHITE);

g2.fillRect(xStep, 0, width, height - xStep);

//Нанесение клетки

g2.setColor(Color.lightGray);

int yStarstPoint = 0;

int xStarstPoint = 0;

//int len = yStep*50;

for (int i = 0; i <= 50; i++) {

g2.drawLine(0, yStarstPoint, getWidth(), yStarstPoint);

g2.drawLine(xStarstPoint, 0, xStarstPoint, getHeight());

yStarstPoint += yStep;

xStarstPoint += xStep;

}

Color lineColorAL = Color.BLUE;

Color pointColorAL = Color.RED;

Color lineColorLL = Color.GREEN;

Color pointColorLL = Color.ORANGE;

int sizePoint = 6;

//Отрисовка линий и точек

drawLineAndPoint(g2, xPixels, yPixelsAL, lineColorAL, pointColorAL, sizePoint);

//drawLineAndPoint(g2, xPixels, yPixelsLL, lineColorLL, pointColorLL, sizePoint);

/*

//Создание легенды

g2.setColor(Color.lightGray);

g2.fillRect(xStep * 9, 0, xStep * 3, yStep * 2);

g2.setColor(Color.BLACK);

g2.drawString("ArrayList", 10 * xStep - yStep - 5, yStep / 2 + 5);

g2.drawString("LinkedList", 10 * xStep - yStep - 5, yStep / 2 + yStep + 5);

g2.setColor(lineColorAL);

g2.drawLine(11 * xStep - 15, yStep / 2, 12 * xStep - 15, yStep / 2);

g2.setColor(lineColorLL);

g2.drawLine(11 * xStep - 15, yStep / 2 + yStep, 12 * xStep - 15, yStep / 2 + yStep);

g2.setColor(pointColorAL);

g2.fillOval((11 * xStep + (xStep / 2)) - (sizePoint / 2) - 15, yStep / 2 - (sizePoint / 2), sizePoint, sizePoint);

g2.setColor(pointColorLL);

g2.fillOval((11 * xStep + (xStep / 2)) - (sizePoint / 2) - 15, yStep / 2 + yStep - (sizePoint / 2), sizePoint, sizePoint);

*/

//Закрашевание оставшегося пространства

g2.setColor(Color.lightGray);

g2.fillRect(0, 0, xStep, height);

g2.fillRect(0, height - xStep - 12, width, height);

/*

g2.setColor(Color.BLACK);

g2.setStroke(new BasicStroke(3));

g2.drawLine(1, 0, 1, this.getHeight());

g2.drawLine(0, this.getHeight()-1, this.getWidth(), this.getHeight()-1);

*/

//Значения по оси х

g2.setColor(Color.BLACK);

//g2.drawString("0", 50 - 3, height - 50 + 10);

int xAxisStep = (int) (xStep / xScale);

for (int i = xAxisStep; i < width / xScale; i+=xAxisStep) {

g2.drawString(String.valueOf(i - xAxisStep), (int) (i * xScale) - 10, height - xStep + 10);

}

int maxPixels = getMaxValue(yPixelsAL);

//int maxYPixelsLL = getMaxValue(yPixelsLL);

int minPixels = getMinValue(yPixelsAL);

//int minYPixelsLL = getMinValue(yPixelsLL);

/*

System.out.println("maxYPixels: " + maxYPixelsAL);

System.out.println("maxZPixels: " + maxYPixelsLL);

System.out.println("maxPixels: " + maxPixels);

*/

//Шаги по оси у

long onePixel = (long) ((max - min)/(maxPixels - minPixels)) * yStep;

long step = onePixel;

int start = 4;

int st = start;

for (int i = height - xStep; i > yStep + 1; i-=yStep) {

g2.drawString(String.valueOf(start), 1, i - yStep);

start+=st;

}

//Подпись осей

g2.drawString("n, кол-во дней", getWidth() - yStep * 2 - 30, getHeight() - yStep);

g2.drawString("t, нс", yStep, yStep / 2);

/*

g2.drawString("1", getWidth()/2, getHeight()/2-50);

g2.drawString("2", getWidth()/2, getHeight()/2-100);

g2.drawString("3", getWidth()/2, getHeight()/2-150);

*/

/*

//Пунктир

g2.setColor(Color.BLACK);

for (int i = 0; i < xPixels.length; i++) {

int x1 = xPixels[i];

int y1 = yPixels[i];

//int x2 = xPixels[i + 1];

//int y2 = yPixels[i + 1];

int z1 = zPixels[i];

//int z2 = zPixels[i + 1];

//g2.drawLine(x1, y1, x2, y2);

//g2.drawLine(x1, z1, x2, z2);

float[] dashPattern = {5, 5};

BasicStroke dashedStroke = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 0, dashPattern, 0);

g2.setStroke(dashedStroke);

g2.drawLine(0, y1, x1, y1);

g2.drawLine(0, z1, x1, z1);

}

*/

}

private int getMaxValue(int[] data) {

int maxValue = data[0];

for (int i = 1; i < data.length; i++) {

if (data[i] > maxValue) {

maxValue = data[i];

}

}

return maxValue;

}

private int getMinValue(int[] data) {

int minValue = data[0];

for (int i = 1; i < data.length; i++) {

if (data[i] < minValue) {

minValue = data[i];

}

}

return minValue;

}

private void drawLineAndPoint(Graphics2D g2, int[] xPixels, int[] yPixels, Color colorLine, Color colorPoint, int sizePoint) {

g2.setColor(colorLine);

//Отрисовка линий между точками

for (int i = 0; i < xPixels.length - 1; i++) {

int x1 = xPixels[i];

int x2 = xPixels[i + 1];

int y1 = yPixels[i];

int y2 = yPixels[i + 1];

g2.drawLine(x1, y1, x2, y2);

}

/*

//Отрисовка точек

g2.setColor(colorPoint);

for (int i = 0; i < xPixels.length; i++) {

int x = xPixels[i];

int y = yPixels[i];

g2.fillOval(x - (sizePoint / 2), y - (sizePoint / 2), sizePoint, sizePoint);

}

*/

}

}

Соседние файлы в предмете Основы языка Java