В моей программе я хочу нарисовать простой линейный график очков. У меня есть текстовый файл, и в каждой строке есть целочисленная оценка, которую я прочитал и хочу передать в качестве аргумента моему классу графика. У меня возникли проблемы с реализацией класса графа, и все примеры, которые я видел, имеют свои методы в том же классе, что и их основной, чего у меня не будет.
Я хочу иметь возможность передать свой массив объекту и сгенерировать график, но при вызове моего метода рисования он запрашивает у меня Graphics g ... Это то, что у меня есть на данный момент:
public class Graph extends JPanel {
public void paintGraph (Graphics g){
ArrayList<Integer> scores = new ArrayList<Integer>(10);
Random r = new Random();
for (int i : scores){
i = r.nextInt(20);
System.out.println(r);
}
int y1;
int y2;
for (int i = 0; i < scores.size(); i++){
y1 = scores.get(i);
y2 = scores.get(i+1);
g.drawLine(i, y1, i+1, y2);
}
}
}
На данный момент Я вставил простой генератор случайных чисел, чтобы заполнить свой массив.
У меня есть существующий фрейм, и я в основном хочу создать экземпляр класса Graph и смонтировать панель на моем фрейме. Мне очень жаль, что этот вопрос кажется таким запутанным, но я мало выспался ...
Код в моем основном утверждении:
testFrame = new JFrame();
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Graph graph = new Graph();
testFrame.add(graph);
Я не совсем уверен, что такое SSCE, но это моя попытка:
public class Test {
JFrame testFrame;
public Test() {
testFrame = new JFrame();
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Graph graph = new Graph();
testFrame.add(graph);
testFrame.setBounds(100, 100, 764, 470);
testFrame.setVisible(true);
}
Graph.java
public class Graph extends JPanel {
public Graph() {
setSize(500, 500);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D gr = (Graphics2D) g; // This is if you want to use Graphics2D
// Now do the drawing here
ArrayList<Integer> scores = new ArrayList<Integer>(10);
Random r = new Random();
for (int i : scores) {
i = r.nextInt(20);
System.out.println(r);
}
int y1;
int y2;
for (int i = 0; i < scores.size() - 1; i++) {
y1 = (scores.get(i)) * 10;
y2 = (scores.get(i + 1)) * 10;
gr.drawLine(i * 10, y1, (i + 1) * 10, y2);
}
}
}
Переопределите метод paintComponent вашей панели, чтобы вы могли рисовать по своему усмотрению. Как это:
@Override
public void paintComponent(Graphics g) {
Graphics2D gr = (Graphics2D) g; //this is if you want to use Graphics2D
//now do the drawing here
...
}