Как представить ось x localdatetime java — Q&A Хекслет
2026-02-26 18:33 Diff
import javax.swing.*; import java.awt.*; import java.time.LocalDateTime; import java.time.Period; import java.util.ArrayList; import java.util.List; public class App { public static void main(String[] args) { // создадим список с данными погоды class Weather { LocalDateTime time; int temperature; public Weather(LocalDateTime time, int temperature) { this.time = time; this.temperature = temperature; } } LocalDateTime time = LocalDateTime.now(); List<Weather> list = new ArrayList<>(List.of(new Weather(time, 0), new Weather(time.minusDays(1), 5), new Weather(time.minusDays(2), 0), new Weather(time.plusDays(1), 10), new Weather(time.plusDays(2), 5))); int cX = 20; // смещение для рисования осей int cY = 350; int points = list.size(); // количество точек на графике // создадим массив координат х list.sort((t1,t2) -> t1.time.compareTo(t2.time)); LocalDateTime minTime = list.get(0).time; int[] xData = new int[points]; for(int i = 0; i < points; i++) { xData[i] = Period.between(minTime.toLocalDate(), list.get(i).time.toLocalDate()).getDays() * 50 + cX; } // создадим массив координат y int[] yData = list.stream() .mapToInt(y -> cY - y.temperature * 10) .toArray(); class PaintWeather extends JPanel { @Override protected void paintComponent(Graphics graphics) { Graphics2D graphics2D = (Graphics2D)graphics; graphics2D.drawLine(cX, cY, cX, cX); // рисуем оси graphics2D.drawLine(cX, cY, cY + 100, cY); graphics2D.drawPolyline(xData, yData, points); // рисуем график } } JPanel panel = new JPanel(new BorderLayout()); panel.add(new PaintWeather(), BorderLayout.CENTER); JFrame frame = new JFrame("График температур"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(panel); frame.setSize(500, 400); frame.setVisible(true); } }