Hướng dẫn vẽ đồ thị hàm số bằng JPanel trong Java
Chào các bạn! Hẳn rằng ai trong số chúng ta cũng đã từng phải vẽ đồ thị hàm số khi còn học trung học. Trong bài viết này, mình sẽ hướng dẫn các bạn cách sử dụng Java và JPanel để vẽ đồ thị một cách đơn giản và trực quan.
1. Tạo Class GraphPanel
Đầu tiên, chúng ta sẽ khởi tạo một lớp Java mới có tên là GraphPanel.java
và yêu cầu nó kế thừa từ lớp JPanel
. Đây là lớp chúng ta sẽ sử dụng để vẽ đồ thị.
java
public class GraphPanel extends JPanel {}
2. Tạo Khung JFrame
Trong lớp GraphPanel.java
, chúng ta sẽ tạo một phương thức main
để khởi chạy ứng dụng. Chúng ta sẽ tạo một đối tượng JFrame
với kích thước 400x400 pixel như trong đoạn mã dưới đây:
java
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new GraphPanel());
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
3. Thêm Phương Thức paintComponent
Tiếp theo, chúng ta sẽ thêm phương thức paintComponent
vào lớp GraphPanel.java
. Đây là phương thức được kéo từ lớp JPanel
, giúp chúng ta vẽ lên trên JPanel. Chúng ta sẽ sử dụng Graphics2D
để có công cụ tốt hơn trong việc vẽ hình học.
java
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
int width = getWidth();
int height = getHeight();
int margin = 50;
}
4. Tạo Lưới (Tùy Chọn)
Nếu bạn thích, có thể thêm một hệ thống lưới vào đồ thị để dễ hình dung hơn. Đoạn mã dưới đây sẽ vẽ các đường thẳng từ trái sang phải và từ trên xuống dưới.
java
// Vẽ lưới
g2.setPaint(Color.LIGHT_GRAY);
for (int i = 0; i < width; i += 50) {
g2.draw(new Line2D.Double(i, 0, i, height));
}
for (int i = height; i > 0; i -= 50) {
g2.draw(new Line2D.Double(0, i, width, i));
}
5. Vẽ Trục X và Trục Y
Để vẽ trục X và Y, chúng ta sẽ sử dụng phương thức g2.draw
với Line2D.Double
. Dưới đây là cách xác định và vẽ các trục:
java
// Vẽ trục X và Y
g2.setPaint(Color.BLACK);
g2.draw(new Line2D.Double(x1, y1, x2, y2));
g2.draw(new Line2D.Double(x3, y3, x4, y4));
// Vẽ mũi tên cho trục X
g2.setPaint(Color.RED);
g2.draw(new Line2D.Double(x4, y4, x4 - 10, y4 - 5));
g2.draw(new Line2D.Double(x4, y4, x4 - 10, y4 + 5));
g.drawString("X", x4 - 10, y4 - 10);
// Vẽ mũi tên cho trục Y
g2.setPaint(Color.RED);
g2.draw(new Line2D.Double(x1, y1, x1 - 5, y1 + 10));
g2.draw(new Line2D.Double(x1, y1, x1 + 5, y1 + 10));
g.drawString("Y", x1 - 10, y1);
6. Vẽ Đồ Thị Parabol
Bây giờ chúng ta sẽ tính toán các điểm trên đồ thị parabol và nối lại với nhau. Để làm điều này, chúng ta sẽ tạo một vòng lặp chạy từ -100 đến 100 với bước 10. Đoạn mã dưới đây cho phép vẽ các điểm dữ liệu:
java
g2.setPaint(Color.BLUE);
boolean firstDot = true;
double lastX = 0.0;
double lastY = 0.0;
for (int i = -100; i <= 100; i+=10) {
double x = centerX + i;
double y = centerY - (0.01 * this.parabol(i));
if(firstDot) {
g2.fill(new Ellipse2D.Double(x - 2, y - 2, 4, 4));
firstDot = false;
} else {
g2.draw(new Line2D.Double(lastX, lastY, x, y));
}
lastX = x;
lastY = y;
}
7. Hàm Parabol
Cuối cùng, chúng ta sẽ định nghĩa hàm parabol để tính toán giá trị y từ x. Bạn có thể thực hiện theo hàm dưới đây và xem cách đồ thị được hiển thị:
java
// Công thức y = x^2
private double parabol(double x) {
return x*x;
}
Ngoài ra, bạn cũng có thể thử nghiệm với hàm khác như sau:
java
// Công thức y = x * sin(x^2) + 1
private double ASinX2PlusOne(double x) {
return (x * Math.sin(x*x) + 1);
}
Với các bước trên, bạn đã tạo ra một chương trình vẽ đồ thị cơ bản bằng JPanel. Cảm ơn các bạn đã theo dõi bài viết, hy vọng nó sẽ hữu ích cho các bạn trong việc tìm hiểu về Java và đồ họa!