Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 05.04.2022
Сообщений: 300

Построить график по массиву java

08.05.2022, 16:58. Показов 4255. Ответов 29

Студворк — интернет-сервис помощи студентам
Здравствуйте! Прошу помогите пожалуйста!! Есть код для построения графика по массиву. Мне его нужно преобразовать чтобы можно было построить по строкам таблицы. Когда я вставляю этот код в слушатель кнопки выходит много ошибок. Помогите пожалуйста исправить их.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
 
public class GraphPanel extends JPanel {
 
    private int width = 800;
    private int heigth = 400;
    private int padding = 25;
    private int labelPadding = 25;
    private Color lineColor = new Color(44, 102, 230, 180);
    private Color pointColor = new Color(100, 100, 100, 180);
    private Color gridColor = new Color(200, 200, 200, 200);
    private static final Stroke GRAPH_STROKE = new BasicStroke(2f);
    private int pointWidth = 4;
    private int numberYDivisions = 10;
    private List<Double> scores;
 
    public GraphPanel(List<Double> scores) {
        this.scores = scores;
    }
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
        double xScale = ((double) getWidth() - (2 * padding) - labelPadding) / (scores.size() - 1);
        double yScale = ((double) getHeight() - 2 * padding - labelPadding) / (getMaxScore() - getMinScore());
 
        List<Point> graphPoints = new ArrayList<>();
        for (int i = 0; i < scores.size(); i++) {
            int x1 = (int) (i * xScale + padding + labelPadding);
            int y1 = (int) ((getMaxScore() - scores.get(i)) * yScale + padding);
            graphPoints.add(new Point(x1, y1));
        }
 
        // draw white background
        g2.setColor(Color.WHITE);
        g2.fillRect(padding + labelPadding, padding, getWidth() - (2 * padding) - labelPadding, getHeight() - 2 * padding - labelPadding);
        g2.setColor(Color.BLACK);
 
        // create hatch marks and grid lines for y axis.
        for (int i = 0; i < numberYDivisions + 1; i++) {
            int x0 = padding + labelPadding;
            int x1 = pointWidth + padding + labelPadding;
            int y0 = getHeight() - ((i * (getHeight() - padding * 2 - labelPadding)) / numberYDivisions + padding + labelPadding);
            int y1 = y0;
            if (scores.size() > 0) {
                g2.setColor(gridColor);
                g2.drawLine(padding + labelPadding + 1 + pointWidth, y0, getWidth() - padding, y1);
                g2.setColor(Color.BLACK);
                String yLabel = ((int) ((getMinScore() + (getMaxScore() - getMinScore()) * ((i * 1.0) / numberYDivisions)) * 100)) / 100.0 + "";
                FontMetrics metrics = g2.getFontMetrics();
                int labelWidth = metrics.stringWidth(yLabel);
                g2.drawString(yLabel, x0 - labelWidth - 5, y0 + (metrics.getHeight() / 2) - 3);
            }
            g2.drawLine(x0, y0, x1, y1);
        }
 
        // and for x axis
        for (int i = 0; i < scores.size(); i++) {
            if (scores.size() > 1) {
                int x0 = i * (getWidth() - padding * 2 - labelPadding) / (scores.size() - 1) + padding + labelPadding;
                int x1 = x0;
                int y0 = getHeight() - padding - labelPadding;
                int y1 = y0 - pointWidth;
                if ((i % ((int) ((scores.size() / 20.0)) + 1)) == 0) {
                    g2.setColor(gridColor);
                    g2.drawLine(x0, getHeight() - padding - labelPadding - 1 - pointWidth, x1, padding);
                    g2.setColor(Color.BLACK);
                    String xLabel = i + "";
                    FontMetrics metrics = g2.getFontMetrics();
                    int labelWidth = metrics.stringWidth(xLabel);
                    g2.drawString(xLabel, x0 - labelWidth / 2, y0 + metrics.getHeight() + 3);
                }
                g2.drawLine(x0, y0, x1, y1);
            }
        }
 
        // create x and y axes 
        g2.drawLine(padding + labelPadding, getHeight() - padding - labelPadding, padding + labelPadding, padding);
        g2.drawLine(padding + labelPadding, getHeight() - padding - labelPadding, getWidth() - padding, getHeight() - padding - labelPadding);
 
        Stroke oldStroke = g2.getStroke();
        g2.setColor(lineColor);
        g2.setStroke(GRAPH_STROKE);
        for (int i = 0; i < graphPoints.size() - 1; i++) {
            int x1 = graphPoints.get(i).x;
            int y1 = graphPoints.get(i).y;
            int x2 = graphPoints.get(i + 1).x;
            int y2 = graphPoints.get(i + 1).y;
            g2.drawLine(x1, y1, x2, y2);
        }
 
        g2.setStroke(oldStroke);
        g2.setColor(pointColor);
        for (int i = 0; i < graphPoints.size(); i++) {
            int x = graphPoints.get(i).x - pointWidth / 2;
            int y = graphPoints.get(i).y - pointWidth / 2;
            int ovalW = pointWidth;
            int ovalH = pointWidth;
            g2.fillOval(x, y, ovalW, ovalH);
        }
    }
 
//    @Override
//    public Dimension getPreferredSize() {
//        return new Dimension(width, heigth);
//    }
    private double getMinScore() {
        double minScore = Double.MAX_VALUE;
        for (Double score : scores) {
            minScore = Math.min(minScore, score);
        }
        return minScore;
    }
 
    private double getMaxScore() {
        double maxScore = Double.MIN_VALUE;
        for (Double score : scores) {
            maxScore = Math.max(maxScore, score);
        }
        return maxScore;
    }
 
    public void setScores(List<Double> scores) {
        this.scores = scores;
        invalidate();
        this.repaint();
    }
 
    public List<Double> getScores() {
        return scores;
    }
 
    private static void createAndShowGui() {
        List<Double> scores = new ArrayList<>();
        Random random = new Random();
        int maxDataPoints = 40;
        int maxScore = 10;
        for (int i = 0; i < maxDataPoints; i++) {
            scores.add((double) random.nextDouble() * maxScore);
//            scores.add((double) i);
        }
        GraphPanel mainPanel = new GraphPanel(scores);
        mainPanel.setPreferredSize(new Dimension(800, 600));
        JFrame frame = new JFrame("DrawGraph");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
 
    public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.05.2022, 16:58
Ответы с готовыми решениями:

Построить график по многомерному массиву
Есть массив вида A={{x,y,z,i,k}, {x1,y1,z1,i1,k1},...}. Нужно построить график из такого массива B={{x*y, k}, {x1*y1, k1},...}. Программа...

Построить график по double-массиву
как построить график по double массиву? chart не установлен Добавлено через 14 часов 38 минут из-за чего график не отклоняется а...

Как построить график по выходному массиву
С помощью данного кода получаю на выходе зависимость параметров от времени. Скрин: Как теперь по этим данным построить график...

29
0 / 0 / 0
Регистрация: 08.01.2022
Сообщений: 21
12.05.2022, 16:43
Студворк — интернет-сервис помощи студентам
Естественно должны отображаться счётчики позиционирования записи в массиве.
Я так привык работать на перспективу развития проекта, а ваша задача, это прежде всего проект, который должен развиваться и иметь перспективу. Извините, если не оправдал Ваших ожиданий, но в вашем окне "графика" уже появилось меню для возможности загрузки данных с файла и сохранения в файл. Далее добавлю внизу строку редактирования/ввода данных массива.
Не всё сразу
0
0 / 0 / 0
Регистрация: 05.04.2022
Сообщений: 300
12.05.2022, 16:52  [ТС]
Вы не подумайте, мне очень любопытно читать Ваши ответы, так как я новичок в Яве
0
0 / 0 / 0
Регистрация: 08.01.2022
Сообщений: 21
12.05.2022, 17:02
Вот такой проект, он пока пустой, его необходимо заполнить всем необходимым функционалом, чем и буду заниматься и делиться с вами результатом.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
 
public class GraphPanel extends JPanel {
 
    private final int W_IDHT = 800;
    private final int H_IGTH = 400;
    private final int P_ADDING = 25;
    private final int LABEL_PADDING = 25;
    private final Color LINE_COLOR = new Color(44, 102, 230, 180);
    private final Color POINT_COLOR = new Color(100, 100, 100, 180);
    private final Color GRID_COLOR = new Color(200, 200, 200, 200);
    private static final Stroke GRAPH_STROKE = new BasicStroke(2f);
    private final int POINT_WIDTH = 4;
    private final int NUMBER_DIVISIONS = 10;
    private List<Double> scores;
   
    
    public GraphPanel(List<Double> scores) {
        this.scores = scores;
    }
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
        double xScale = ((double) getWidth() - (2 * P_ADDING) - LABEL_PADDING) / (scores.size() - 1);
        double yScale = ((double) getHeight() - 2 * P_ADDING - LABEL_PADDING) / (getMaxScore() - getMinScore());
 
        List<Point> graphPoints = new ArrayList<>();
        for (int i = 0; i < scores.size(); i++) {
            int x1 = (int) (i * xScale + P_ADDING + LABEL_PADDING);
            int y1 = (int) ((getMaxScore() - scores.get(i)) * yScale + P_ADDING);
            graphPoints.add(new Point(x1, y1));
        }
 
        // draw white background
        g2.setColor(Color.WHITE);
        g2.fillRect(P_ADDING + LABEL_PADDING, P_ADDING, getWidth() - (2 * P_ADDING) - LABEL_PADDING, getHeight() - 2 * P_ADDING);
 
        // create hatch marks and grid lines for y axis.
        for (int i = 0; i < NUMBER_DIVISIONS + 1; i++) {
            int x0 = P_ADDING + LABEL_PADDING;
            int x1 = POINT_WIDTH + P_ADDING + LABEL_PADDING;
            int y0 = getHeight() - ((i * (getHeight() - P_ADDING * 2 - LABEL_PADDING)) / NUMBER_DIVISIONS + P_ADDING + LABEL_PADDING);
            int y1 = y0;
            if (scores.size() > 0) {
                g2.setColor(GRID_COLOR);
                g2.drawLine(P_ADDING + LABEL_PADDING + 1 + POINT_WIDTH, y0, getWidth() - P_ADDING, y1);
                g2.setColor(Color.BLACK);
                String yLabel = ((int) ((getMinScore() + (getMaxScore() - getMinScore()) * ((i * 1.0) / NUMBER_DIVISIONS)) * 100)) / 100.0 + "";
                FontMetrics metrics = g2.getFontMetrics();
                int labelWidth = metrics.stringWidth(yLabel);
                g2.drawString(yLabel, x0 - labelWidth - 5, y0 + (metrics.getHeight() / 2) - 3);
            }
            g2.drawLine(x0, y0, x1, y1);
        }
 
        // and for x axis
        for (int i = 0; i < scores.size(); i++) {
            if (scores.size() > 1) {
                int x0 = i * (getWidth() - P_ADDING * 2 - LABEL_PADDING) / (scores.size() - 1) + P_ADDING + LABEL_PADDING;
                int x1 = x0;
                int y0 = getHeight() - P_ADDING - LABEL_PADDING;
                int y1 = y0 - POINT_WIDTH;
                if ((i % ((int) ((scores.size() / 20.0)) + 1)) == 0) {
                    g2.setColor(GRID_COLOR);
                    g2.drawLine(x0, getHeight() - P_ADDING - LABEL_PADDING - 1 - POINT_WIDTH, x1, P_ADDING);
                    g2.setColor(Color.BLACK);
                    String xLabel = i + "";
                    FontMetrics metrics = g2.getFontMetrics();
                    int labelWidth = metrics.stringWidth(xLabel);
                    g2.drawString(xLabel, x0 - labelWidth / 2, y0 + metrics.getHeight() + 3);
                }
                g2.drawLine(x0, y0, x1, y1);
            }
        }
 
        // create x and y axes 
        g2.drawLine(P_ADDING + LABEL_PADDING, getHeight() - P_ADDING - LABEL_PADDING, P_ADDING + LABEL_PADDING, P_ADDING);
        g2.drawLine(P_ADDING + LABEL_PADDING, getHeight() - P_ADDING - LABEL_PADDING, getWidth() - P_ADDING, getHeight() - P_ADDING - LABEL_PADDING);
 
        Stroke oldStroke = g2.getStroke();
        g2.setColor(LINE_COLOR);
        g2.setStroke(GRAPH_STROKE);
        for (int i = 0; i < graphPoints.size() - 1; i++) {
            int x1 = graphPoints.get(i).x;
            int y1 = graphPoints.get(i).y;
            int x2 = graphPoints.get(i + 1).x;
            int y2 = graphPoints.get(i + 1).y;
            g2.drawLine(x1, y1, x2, y2);
        }
 
        g2.setStroke(oldStroke);
        g2.setColor(POINT_COLOR);
        for (int i = 0; i < graphPoints.size(); i++) {
            int x = graphPoints.get(i).x - POINT_WIDTH / 2;
            int y = graphPoints.get(i).y - POINT_WIDTH / 2;
            int ovalW = POINT_WIDTH;
            int ovalH = POINT_WIDTH;
            g2.fillOval(x, y, ovalW, ovalH);
        }
    }
 
//    @Override
//    public Dimension getPreferredSize() {
//        return new Dimension(width, heigth);
//    }
    private double getMinScore() {
        double minScore = Double.MAX_VALUE;
        for (Double score : scores) {
            minScore = Math.min(minScore, score);
        }
        return minScore;
    }
 
    private double getMaxScore() {
        double maxScore = Double.MIN_VALUE;
        for (Double score : scores) {
            maxScore = Math.max(maxScore, score);
        }
        return maxScore;
    }
 
    public void setScores(List<Double> scores) {
        this.scores = scores;
        invalidate();
        this.repaint();
    }
 
    public List<Double> getScores() {
        return scores;
    }
 
    private static void createAndShowGui() {
        List<Double> scores = new ArrayList<>();
        Random random = new Random();
        int maxDataPoints = 40;
        int maxScore = 10;
        for (int i = 0; i < maxDataPoints; i++) {
            scores.add((double) random.nextDouble() * maxScore);
//            scores.add((double) i);
        }
        GraphPanel mainPanel = new GraphPanel(scores);
        mainPanel.setPreferredSize(new Dimension(800, 600));
        JFrame frame = new JFrame("График");
    // Добавлено меню    
   
         // Создание панели меню и добавление компонентов
        JMenuBar mb = new JMenuBar();
        JMenu m1 = new JMenu("FILE");
        JMenu m2 = new JMenu("Help");
        mb.add(m1);
        mb.add(m2);
        JMenuItem m11 = new JMenuItem("Открыть");
        JMenuItem m22 = new JMenuItem("Сохранить как");
        m1.add(m11);
        m1.add(m22);
 
        // Создание панели внизу и добавление компонентов
        JPanel panel = new JPanel(); // панель не видна при выводе
        JLabel label = new JLabel("Введите новое значение");
        JTextField tf = new JTextField(10); // принимает до 10 символов
        JButton send = new JButton("Отправить в массив");
        JButton reset = new JButton("Сброс текщего значения");
        panel.add(label); // Компоненты, добавленные с помощью макета Flow Layout
        panel.add(tf);
        panel.add(send);
        panel.add(reset);
 
        // Текстовая область по центру
        JTextArea ta = new JTextArea();
 
        // Добавление компонентов в рамку.
        frame.getContentPane().add(BorderLayout.SOUTH, panel);
        frame.getContentPane().add(BorderLayout.NORTH, mb);
        frame.getContentPane().add(BorderLayout.CENTER, ta);
        frame.setVisible(true);
        //..............
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
     
    }
 
  
    public static void main(String[] args) {
      SwingUtilities.invokeLater(() -> {
          createAndShowGui();
      });
   }}
Вы, конечно можете исследовать другие пути, что естественно, а в дальнейшем выбрать из всего, что наработано, то, что именно Вам нужно.
0
0 / 0 / 0
Регистрация: 08.01.2022
Сообщений: 21
12.05.2022, 17:07
вот так будет выглядеть программа
Миниатюры
Построить график по массиву java  
0
0 / 0 / 0
Регистрация: 08.01.2022
Сообщений: 21
12.05.2022, 23:06
Вы случайно не учитесь на курсах "javarush"?
0
0 / 0 / 0
Регистрация: 05.04.2022
Сообщений: 300
12.05.2022, 23:18  [ТС]
Не, ищу информацию на разных сайтах))
0
0 / 0 / 0
Регистрация: 08.01.2022
Сообщений: 21
23.05.2022, 22:14
Работы по хозяйству полно, так что имею возможность посидеть над программой вечерами и то недолго, поспать нужно
Тут у меня вот какая идея возникла: - прокрутку содержимого массива реализовать через "Слайдер".
Замысел такой, что перемещая движок слайдера перемещаемся по массиву, а текущее положение слайдера отображается в окне JTextField, которое можно отредактировать либо удалить.
Вроде всё просто, но есть загвоздка, реализовать слайдер оказалось сложно, так как все примеры даются с использованием JPanel, а на ней можно отобразить только используя JavaFX, до некоторых пор JavaFX как мне известно имеет платную лицензию. Нарисовать можно, посмотреть можно, но без лицензии собрать исполнительный файл не получится - пробовал в своё время, был разочарован. Можно обойти использование слайдера через JFrame поскольку как я понял JPanel чисто для рисования и JavaFX использует так же графические функции отображения элементов окна и поэтому в этом случае совместима.
попробую найти решение со Слайдером через JFrame, ну а остальное уже лирика.
JSlider sldIterations = new JSlider(мин:1, мах:100, шаг итерации:1); Минимальное и максимальное значение задаётся индексом массива. Значение по индексу присваивается JTextField и отображается в его окне.
Вот такие у меня планы.
0
0 / 0 / 0
Регистрация: 08.01.2022
Сообщений: 21
06.06.2022, 01:19
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
package SliderGraphPanel;
 
 
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
 
public class GraphPanel extends JPanel {
 
    private static String getPercent(int value) //создаём макет строки "Лейбл" для отображения показаний слайдера
    {
        return "текущий индекс: " + (int)value + " "; //Возвращаем готовый макет в "ЛеблСлайдера"
    //долго мучился с getPercent потому что ни как не мог найти её место в программе, но она должна находится именно здесь
    //именно как Приват и именно как Статик, иначе её ни от куда не видно.
    }
 
    
     
   
 
    private final int W_IDHT = 800;
    private final int H_IGTH = 400;
    private final int P_ADDING = 25;
    private final int LABEL_PADDING = 25;
    private final Color LINE_COLOR = new Color(44, 102, 230, 180);
    private final Color POINT_COLOR = new Color(100, 100, 100, 180);
    private final Color GRID_COLOR = new Color(200, 200, 200, 200);
    private static final Stroke GRAPH_STROKE = new BasicStroke(2f);
    private final int POINT_WIDTH = 4;
    private final int NUMBER_DIVISIONS = 10;
    private List<Double> scores;
  
    
    
    public GraphPanel(List<Double> scores) {
        this.scores = scores;
    }
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
        double xScale = ((double) getWidth() - (2 * P_ADDING) - LABEL_PADDING) / (scores.size() - 1);
        double yScale = ((double) getHeight() - 2 * P_ADDING - LABEL_PADDING) / (getMaxScore() - getMinScore());
 
        List<Point> graphPoints = new ArrayList<>();
        for (int i = 0; i < scores.size(); i++) {
            int x1 = (int) (i * xScale + P_ADDING + LABEL_PADDING);
            int y1 = (int) ((getMaxScore() - scores.get(i)) * yScale + P_ADDING);
            graphPoints.add(new Point(x1, y1));
        }
 
        // draw white background
        g2.setColor(Color.WHITE);
        g2.fillRect(P_ADDING + LABEL_PADDING, P_ADDING, getWidth() - (2 * P_ADDING) - LABEL_PADDING, getHeight() - 2 * P_ADDING);
 
        // create hatch marks and grid lines for y axis.
        for (int i = 0; i < NUMBER_DIVISIONS + 1; i++) {
            int x0 = P_ADDING + LABEL_PADDING;
            int x1 = POINT_WIDTH + P_ADDING + LABEL_PADDING;
            int y0 = getHeight() - ((i * (getHeight() - P_ADDING * 2 - LABEL_PADDING)) / NUMBER_DIVISIONS + P_ADDING + LABEL_PADDING);
            int y1 = y0;
            if (scores.size() > 0) {
                g2.setColor(GRID_COLOR);
                g2.drawLine(P_ADDING + LABEL_PADDING + 1 + POINT_WIDTH, y0, getWidth() - P_ADDING, y1);
                g2.setColor(Color.BLACK);
                String yLabel = ((int) ((getMinScore() + (getMaxScore() - getMinScore()) * ((i * 1.0) / NUMBER_DIVISIONS)) * 100)) / 100.0 + "";
                FontMetrics metrics = g2.getFontMetrics();
                int labelWidth = metrics.stringWidth(yLabel);
                g2.drawString(yLabel, x0 - labelWidth - 5, y0 + (metrics.getHeight() / 2) - 3);
            }
            g2.drawLine(x0, y0, x1, y1);
        }
 
        // and for x axis
        for (int i = 0; i < scores.size(); i++) {
            if (scores.size() > 1) {
                int x0 = i * (getWidth() - P_ADDING * 2 - LABEL_PADDING) / (scores.size() - 1) + P_ADDING + LABEL_PADDING;
                int x1 = x0;
                int y0 = getHeight() - P_ADDING - LABEL_PADDING;
                int y1 = y0 - POINT_WIDTH;
                if ((i % ((int) ((scores.size() / 20.0)) + 1)) == 0) {
                    g2.setColor(GRID_COLOR);
                    g2.drawLine(x0, getHeight() - P_ADDING - LABEL_PADDING - 1 - POINT_WIDTH, x1, P_ADDING);
                    g2.setColor(Color.BLACK);
                    String xLabel = i + "";
                    FontMetrics metrics = g2.getFontMetrics();
                    int labelWidth = metrics.stringWidth(xLabel);
                    g2.drawString(xLabel, x0 - labelWidth / 2, y0 + metrics.getHeight() + 3);
                }
                g2.drawLine(x0, y0, x1, y1);
            }
        }
 
        // create x and y axes 
        g2.drawLine(P_ADDING + LABEL_PADDING, getHeight() - P_ADDING - LABEL_PADDING, P_ADDING + LABEL_PADDING, P_ADDING);
        g2.drawLine(P_ADDING + LABEL_PADDING, getHeight() - P_ADDING - LABEL_PADDING, getWidth() - P_ADDING, getHeight() - P_ADDING - LABEL_PADDING);
 
        Stroke oldStroke = g2.getStroke();
        g2.setColor(LINE_COLOR);
        g2.setStroke(GRAPH_STROKE);
        for (int i = 0; i < graphPoints.size() - 1; i++) {
            int x1 = graphPoints.get(i).x;
            int y1 = graphPoints.get(i).y;
            int x2 = graphPoints.get(i + 1).x;
            int y2 = graphPoints.get(i + 1).y;
            g2.drawLine(x1, y1, x2, y2);
        }
 
        g2.setStroke(oldStroke);
        g2.setColor(POINT_COLOR);
        for (int i = 0; i < graphPoints.size(); i++) {
            int x = graphPoints.get(i).x - POINT_WIDTH / 2;
            int y = graphPoints.get(i).y - POINT_WIDTH / 2;
            int ovalW = POINT_WIDTH;
            int ovalH = POINT_WIDTH;
            g2.fillOval(x, y, ovalW, ovalH);
        }
    }
 
//    @Override
//    public Dimension getPreferredSize() {
//        return new Dimension(width, heigth);
//    }
    private double getMinScore() {
        double minScore = Double.MAX_VALUE;
        for (Double score : scores) {
            minScore = Math.min(minScore, score);
        }
        return minScore;
    }
 
    private double getMaxScore() {
        double maxScore = Double.MIN_VALUE;
        for (Double score : scores) {
            maxScore = Math.max(maxScore, score);
        }
        return maxScore;
    }
 
    public void setScores(List<Double> scores) {
        this.scores = scores;
        invalidate();
        this.repaint();
    }
 
    public List<Double> getScores() {
        return scores;
    }
 
    private static void createAndShowGui() {
        List<Double> scores = new ArrayList<>();
        Random random = new Random();
        int maxDataPoints = 40;
        int maxScore = 10;
        for (int i = 0; i < maxDataPoints; i++) {
            scores.add((double) random.nextDouble() * maxScore);
        // scores.add((double) i);
        
        }
        int i = 0;
        
        int n1 = i;      //устанавливается минимум на ленейке слайдера
        int n2 = maxDataPoints;    //устанавливается максимум
        int n3 = 0;      //стартовая позиция ползунка на шкале
                        //создание ползунка Слайдера
        JSlider slider = new JSlider(JSlider.HORIZONTAL,n1,n2,n3);
        JTextField tf = new JTextField(10); // принимает до 10 символов   
                        // Настройка внешнего вида ползунка
        slider.setOrientation(JSlider.CENTER);
        slider.setMajorTickSpacing(50);
        slider.setMinorTickSpacing(10);
        slider.setPaintTicks(true);
        //создаём надпись для показаний слайдера
        JLabel labelSlider;
        // передаём Лейбл значения слайдера
        labelSlider = new JLabel(getPercent(slider.getValue()));
         //присоединяем к Слайдеру слушателя событий
            slider.addChangeListener((ChangeEvent e) -> 
            {
            //присваиваем текущие показания от слайдера переменной "value"
            //берём значение от слайдера 
            int value = ((JSlider)e.getSource()).getValue();
            //и отображаем в строке Лейбл эти показания через переменную "value"
            labelSlider.setText(getPercent(value));
            //помещаем показания Слайдера в окне "JTextField tf"
            tf.setText(String.valueOf(scores.listIterator(value)));
            });
           
        //Создаём Главную Панель на которой будет отображаться сам График
        GraphPanel mainPanel = new GraphPanel(scores);
        mainPanel.setPreferredSize(new Dimension(800, 600));//задаём размеры Главной панели
        JFrame frame = new JFrame("График"); //создаём окно - Фрейм в котором будем размещать свои панели
       
   
         // Создание панели меню и добавление компонентов
        JMenuBar mb = new JMenuBar();
        JMenu m1 = new JMenu("FILE");
        JMenu m2 = new JMenu("Help");
        mb.add(m1);
        mb.add(m2);
        JMenuItem m11 = new JMenuItem("Открыть");
        JMenuItem m22 = new JMenuItem("Сохранить как");
        m1.add(m11);
        m1.add(m22);
 
        // Создание второй панели внизу и добавление компонентов
        JPanel panel = new JPanel(); // панель не видна при выводе. Это дополнительная панель 
        //на которой мы разместим компоненты управления программой
        panel.setLayout(null); //отключаем автоматическое размещение компонентов для этой панели
        //Сначала нужно сказать контейнеру о том, что мы не будем использовать layout manager. 
        //Для этого вызываем метод setLayout у контейнера и передаем туда в качестве параметра null.
        
        panel.setPreferredSize(new Dimension(800, 100));//устанавливаем размер второй панели
        JLabel label = new JLabel("Введите новое значение:");//объявляем компоненты которые будут размещены на этой панели
        JButton send = new JButton("Отправить в массив");
        JButton reset = new JButton("Сброс текщего значения");
        label.setBounds(170, 0, 200, 30); //и указываем вручную расположение каждого компонента на этой панели
        panel.add(label); // Компоненты, добавленные с помощью макета Flow Layout
        tf.setBounds(220, 30, 60, 30);
        panel.add(tf);
        send.setBounds(20, 30, 190, 30);
        panel.add(send);
        reset.setBounds(290, 30, 190, 30);
        panel.add(reset);
        slider.setBounds(0, 60, 800, 30);
        panel.add(slider);
        labelSlider.setBounds(600, 0, 200, 30);
        panel.add(labelSlider);
       
        // Добавление Главной панели со всеми компонентами в рамку/окно (Фрейм).
        frame.getContentPane().add(BorderLayout.SOUTH, panel);
        frame.getContentPane().add(BorderLayout.NORTH, mb);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
     
    }
 
  
    public static void main(String[] args) {
      SwingUtilities.invokeLater(() -> {
          createAndShowGui();
      });
   }}
Кое что на первых порах осилил. Получилось встроить Слайдер. Теперь нужно научится передавать значения слайдера как индекс Массива, тогда появится возможность управлять данными массива, запись, чтение, стирание.
Слайдер я выбрал как элемент управления только потому, что с помощью него можно быстро перемещаться по массиву в нужное место. Так же есть возможность клавишами курсора работать, перемещаться по массиву с шагом "1". и всё в одном флаконе.
И уже в конце реализовать сохранение данных в файл и загрузку данных из файла.
0
0 / 0 / 0
Регистрация: 08.01.2022
Сообщений: 21
06.06.2022, 19:34
Слайдер считывает значения из массива, просто окно "JTextField tf" было слишком мало, что бы разместить в нём число Двойной точности.
Строка кода должна выглядеть вот так:
Java
1
2
//помещаем показания Слайдера в окно "JTextField tf"
            tf.setText(String.valueOf(scores.get(value)));
А значения положения и размеров элементов такими:

Java
1
2
3
4
5
6
7
8
9
10
11
12
label.setBounds(170, 0, 200, 30); //и указываем вручную расположение каждого компонента на этой панели
        panel.add(label); // Компоненты, добавленные с помощью макета Flow Layout
        tf.setBounds(220, 30, 300, 30);
        panel.add(tf);
        send.setBounds(20, 30, 190, 30);
        panel.add(send);
        reset.setBounds(590, 30, 190, 30);
        panel.add(reset);
        slider.setBounds(0, 60, 800, 30);
        panel.add(slider);
        labelSlider.setBounds(600, 0, 200, 30);
        panel.add(labelSlider);
теперь число видно целиком.

теперь буду заниматься реализацией кнопок редактирования содержимого массива, ввод данных вручную и удаление.
0
0 / 0 / 0
Регистрация: 08.01.2022
Сообщений: 21
07.06.2022, 16:19
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
package SliderGraphPanel;
 
 
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
 
public class GraphPanel extends JPanel {
 
    private static int indx;
 
    private static String maket(int value) //создаём макет строки "Лейбл" для отображения показаний слайдера
    {
        return "текущий индекс: " + (int)value + " "; //Возвращаем готовый макет в "ЛеблСлайдера"
    //долго мучился с getPercent потому что ни как не мог найти её место в программе, но она должна находится именно здесь
    //именно как Приват и именно как Статик, иначе её ни от куда не видно.
    //дал собственное название "Макет" вместо "getPercent" мне так юльше нравится
    }
 
    
     
   
 
    private final int W_IDHT = 800;
    private final int H_IGTH = 400;
    private final int P_ADDING = 25;
    private final int LABEL_PADDING = 25;
    private final Color LINE_COLOR = new Color(44, 102, 230, 180);
    private final Color POINT_COLOR = new Color(100, 100, 100, 180);
    private final Color GRID_COLOR = new Color(200, 200, 200, 200);
    private static final Stroke GRAPH_STROKE = new BasicStroke(2f);
    private final int POINT_WIDTH = 4;
    private final int NUMBER_DIVISIONS = 10;
    private List<Double> scores;
  
    
    
    public GraphPanel(List<Double> scores) {
        this.scores = scores;
    }
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
        double xScale = ((double) getWidth() - (2 * P_ADDING) - LABEL_PADDING) / (scores.size() - 1);
        double yScale = ((double) getHeight() - 2 * P_ADDING - LABEL_PADDING) / (getMaxScore() - getMinScore());
 
        List<Point> graphPoints = new ArrayList<>();
        for (int i = 0; i < scores.size(); i++) {
            int x1 = (int) (i * xScale + P_ADDING + LABEL_PADDING);
            int y1 = (int) ((getMaxScore() - scores.get(i)) * yScale + P_ADDING);
            graphPoints.add(new Point(x1, y1));
        }
 
        // draw white background
        g2.setColor(Color.WHITE);
        g2.fillRect(P_ADDING + LABEL_PADDING, P_ADDING, getWidth() - (2 * P_ADDING) - LABEL_PADDING, getHeight() - 2 * P_ADDING);
 
        // create hatch marks and grid lines for y axis.
        for (int i = 0; i < NUMBER_DIVISIONS + 1; i++) {
            int x0 = P_ADDING + LABEL_PADDING;
            int x1 = POINT_WIDTH + P_ADDING + LABEL_PADDING;
            int y0 = getHeight() - ((i * (getHeight() - P_ADDING * 2 - LABEL_PADDING)) / NUMBER_DIVISIONS + P_ADDING + LABEL_PADDING);
            int y1 = y0;
            if (scores.size() > 0) {
                g2.setColor(GRID_COLOR);
                g2.drawLine(P_ADDING + LABEL_PADDING + 1 + POINT_WIDTH, y0, getWidth() - P_ADDING, y1);
                g2.setColor(Color.BLACK);
                String yLabel = ((int) ((getMinScore() + (getMaxScore() - getMinScore()) * ((i * 1.0) / NUMBER_DIVISIONS)) * 100)) / 100.0 + "";
                FontMetrics metrics = g2.getFontMetrics();
                int labelWidth = metrics.stringWidth(yLabel);
                g2.drawString(yLabel, x0 - labelWidth - 5, y0 + (metrics.getHeight() / 2) - 3);
            }
            g2.drawLine(x0, y0, x1, y1);
        }
 
        // and for x axis
        for (int i = 0; i < scores.size(); i++) {
            if (scores.size() > 1) {
                int x0 = i * (getWidth() - P_ADDING * 2 - LABEL_PADDING) / (scores.size() - 1) + P_ADDING + LABEL_PADDING;
                int x1 = x0;
                int y0 = getHeight() - P_ADDING - LABEL_PADDING;
                int y1 = y0 - POINT_WIDTH;
                if ((i % ((int) ((scores.size() / 20.0)) + 1)) == 0) {
                    g2.setColor(GRID_COLOR);
                    g2.drawLine(x0, getHeight() - P_ADDING - LABEL_PADDING - 1 - POINT_WIDTH, x1, P_ADDING);
                    g2.setColor(Color.BLACK);
                    String xLabel = i + "";
                    FontMetrics metrics = g2.getFontMetrics();
                    int labelWidth = metrics.stringWidth(xLabel);
                    g2.drawString(xLabel, x0 - labelWidth / 2, y0 + metrics.getHeight() + 3);
                }
                g2.drawLine(x0, y0, x1, y1);
            }
        }
 
        // create x and y axes 
        g2.drawLine(P_ADDING + LABEL_PADDING, getHeight() - P_ADDING - LABEL_PADDING, P_ADDING + LABEL_PADDING, P_ADDING);
        g2.drawLine(P_ADDING + LABEL_PADDING, getHeight() - P_ADDING - LABEL_PADDING, getWidth() - P_ADDING, getHeight() - P_ADDING - LABEL_PADDING);
 
        Stroke oldStroke = g2.getStroke();
        g2.setColor(LINE_COLOR);
        g2.setStroke(GRAPH_STROKE);
        for (int i = 0; i < graphPoints.size() - 1; i++) {
            int x1 = graphPoints.get(i).x;
            int y1 = graphPoints.get(i).y;
            int x2 = graphPoints.get(i + 1).x;
            int y2 = graphPoints.get(i + 1).y;
            g2.drawLine(x1, y1, x2, y2);
        }
 
        g2.setStroke(oldStroke);
        g2.setColor(POINT_COLOR);
        for (int i = 0; i < graphPoints.size(); i++) {
            int x = graphPoints.get(i).x - POINT_WIDTH / 2;
            int y = graphPoints.get(i).y - POINT_WIDTH / 2;
            int ovalW = POINT_WIDTH;
            int ovalH = POINT_WIDTH;
            g2.fillOval(x, y, ovalW, ovalH);
        }
    }
 
//    @Override
//    public Dimension getPreferredSize() {
//        return new Dimension(width, heigth);
//    }
    private double getMinScore() {
        double minScore = Double.MAX_VALUE;
        for (Double score : scores) {
            minScore = Math.min(minScore, score);
        }
        return minScore;
    }
 
    private double getMaxScore() {
        double maxScore = Double.MIN_VALUE;
        for (Double score : scores) {
            maxScore = Math.max(maxScore, score);
        }
        return maxScore;
    }
 
    public void setScores(List<Double> scores) {
        this.scores = scores;
        invalidate();
        this.repaint();
    }
 
    public List<Double> getScores() {
        return scores;
    }
 
    private static void createAndShowGui() { 
        List<Double> scores = new ArrayList<>();
        Random random = new Random();
        int maxDataPoints = 40;     // максимальное число значений по оси "X"
        int maxScore = 100;         //максимальное значение числа по оси "Y"
        for (int i = 0; i < maxDataPoints; i++) {
            scores.add((double) random.nextDouble() * maxScore);
        // scores.add((double) i);
         
        }
        int i = 0;
        
        int n1 = i;      //устанавливается минимум на ленейке слайдера
        int n2 = scores.size()-1;    //устанавливается максимум минус "1", что бы не выбрасывало исключение
        int n3 = 0;      //стартовая позиция ползунка на шкале
                        //создание ползунка Слайдера
        JSlider slider = new JSlider(JSlider.HORIZONTAL,n1,n2,n3);
        JTextField tf = new JTextField(20); // отображает до 20 символов   
                        // Настройка внешнего вида ползунка
        slider.setOrientation(JSlider.CENTER);
        slider.setMajorTickSpacing(n2); // определяем размерность шкалы слайдера от размера массива
        slider.setMinorTickSpacing(5); //определяем цену деления шкалы слайдера
        slider.setPaintTicks(true);
        //создаём надпись для показаний слайдера
        JLabel labelSlider;
        // присваиваем Леблу "макет" для просмотра показаний слайдера
        labelSlider = new JLabel(maket(slider.getValue()));
         //присоединяем к Слайдеру слушателя событий
            slider.addChangeListener((ChangeEvent e) -> 
            {
            //присваиваем текущие показания от слайдера переменной "value"
            indx = ((JSlider)e.getSource()).getValue();
            //и отображаем в строке Лейбл показания слайдера как индекс массива через переменную "value"
            labelSlider.setText(maket(indx));
            //помещаем показания Слайдера в окно "JTextField tf". Слайдер даёт нам значение индекса 
            //которое мы используем для считывания данных массива по этому индексу
            tf.setText(String.valueOf(scores.get(indx)));
            });
           
        //Создаём Главную Панель на которой будет отображаться сам График
        GraphPanel mainPanel = new GraphPanel(scores);
        mainPanel.setPreferredSize(new Dimension(800, 600));//задаём размеры Главной панели
        JFrame frame = new JFrame("График"); //создаём окно - Фрейм в котором будем размещать свои панели
       
   
         // Создание панели меню и добавление компонентов
        JMenuBar mb = new JMenuBar();
        JMenu m1 = new JMenu("FILE");
        JMenu m2 = new JMenu("Help");
        mb.add(m1);
        mb.add(m2);
        JMenuItem m11 = new JMenuItem("Открыть");
        JMenuItem m22 = new JMenuItem("Сохранить как");
        m1.add(m11);
        m1.add(m22);
 
        // Создание второй панели внизу и добавляем в неё компоненты управления программой
        JPanel panel = new JPanel(); // панель не видна при выводе. Это дополнительная панель 
        //на которой мы разместим компоненты управления программой
        panel.setLayout(null); //отключаем автоматическое размещение компонентов для этой панели
        //Сначала нужно сказать контейнеру о том, что мы не будем использовать layout manager. 
        //Для этого вызываем метод setLayout у контейнера и передаем туда в качестве параметра null.
        
        panel.setPreferredSize(new Dimension(800, 100));//устанавливаем размер второй панели
        JLabel label = new JLabel("Введите новое значение:");//объявляем компоненты которые будут размещены на этой панели
        JButton send = new JButton("Отправить в массив");
        send.addActionListener((ActionEvent e) -> {
            scores.add(indx, Double.parseDouble(tf.getText())); //записываем в массив новое значение 
            mainPanel.repaint(); // и перерисовываем отображение графика с новыми значениями
        });
        
        
        JButton reset = new JButton("Сброс текущего значения");
        reset.addActionListener((ActionEvent e) -> {
            scores.remove(indx); //удаляет значение из массива по текущему индексу
            mainPanel.repaint(); //перерисовывает окно графика  после удаления и показывает график с обновлёнными значениями
        });
        
        
        label.setBounds(270, 0, 200, 30); //добавляем созданные ранее элементы управления 
        //и указываем вручную расположение каждого компонента на этой панели
        panel.add(label); // Компоненты, добавленные с помощью макета Flow Layout
        tf.setBounds(220, 30, 300, 30);
        panel.add(tf);
        send.setBounds(20, 30, 190, 30);
        
        panel.add(send);
        reset.setBounds(590, 30, 190, 30);
        panel.add(reset);
        slider.setBounds(0, 60, 800, 30);
        panel.add(slider);
        labelSlider.setBounds(600, 0, 200, 30);
        panel.add(labelSlider);
  
        // Добавление Главной панели со всеми компонентами в рамку/окно (Фрейм).
        frame.getContentPane().add(BorderLayout.SOUTH, panel);
        frame.getContentPane().add(BorderLayout.NORTH, mb);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
     
    }
 
  
    public static void main(String[] args) {
      SwingUtilities.invokeLater(() -> { // рекомендуется запускать программу на исполнение именно таким вот образом
          createAndShowGui();
      });
   }}
В принципе вводить данные уже можно хоть и вручную.
!!! Вводить числа только через десятичный разделитель "." - точка, иначе выбрасывает исключение о недопустимом параметре или что-то вроде этого.
доработать: - Изменение размера массива. Линейка всегда упирается в значение 39
доработать: - Проверку на корректность ввода только десятичных чисел и десятичной точки, все прочие символы отсекаются.
Ну и последнее это загрузка данных из файла.

Задача максимум решена, значения можно вводить вручную, значит хоть таким образом но результат получить можно.

Добавлено через 17 минут
Дополнение к предыдущему комментарию: Можно копировать и вставлять значения в окно ввода из любого документа посредством стандартного сочетания клавиш Ctrl+"V"

Добавлено через 10 минут
Задачка решена. Что смог. Значения вводить хоть и вручную но уже можно, а дальше уже сами.
Таблица, это всего лишь визуальное представление массива, который можно сохранить в файл, в одной программе, а затем считать в другой.
Или набрать данные в этой программе и сохранить в другой.
Можно подключить внешнюю функцию в виде подключаемого файла, которая будет что-то рассчитывать, а программа отображать полученные значения в графике.
Файлы таких подключаемых функций так же можно сохранять как и данные переданные в массив.
Короче, возможностей полно и учится программированию ни когда не позно.


Я не волшебник, я только учусь, но усердие помогает нам творить настоящие чудеса

Добавлено через 7 минут
забыл исправить имя переменной "value" на "indx"
Java
1
2
3
4
5
6
7
private static String maket(int indx) //создаём макет строки "Лейбл" для отображения показаний слайдера
    {
        return "текущий индекс: " + (int)indx + " "; //Возвращаем готовый макет в "ЛеблСлайдера"
    //долго мучился с getPercent потому что ни как не мог найти её место в программе, но она должна находится именно здесь
    //именно как Приват и именно как Статик, иначе её ни от куда не видно.
    //дал собственное название "Макет" вместо "getPercent" мне так юльше нравится
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2022, 16:19

Как построить график oxyPlot по массиву точек?
Возникла необходимость строить графики в WPF, выбрал для этого библиотеку OxyPlot, однако не могу разобраться как задать график не через...

Как построить анимированный график по массиву точек из блокнота
Добрый день! Подскажите, кто знает, есть текстовик txt в котором 7000 цифер, суть задачи построить анимированный график по этим точкам. ...

Как построить график по формуле из программы или по массиву значений?
Здравствуйте. Пишу сейчас практическую работу в универе, первый курс. Программа по демодуляции сигнала. Она уже почти готова, граф....

Построить 3d график по трём координатам Х Y Z без матриц только по массиву точек находящихся в TXT
Ребят всем привет! немогу ни как понять как построить 3д графики по трём координатам без матриц, а чисто по заданным точкам, причём х,у...

построить график используя Flot, query, java
есть код, но у него еще нужно добавить выбор по периодам, кто знает? &lt;script language=&quot;javascript&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru