Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
Cách dùng hàm đồ họa trong java swing
08:13 29-04-2017
5.181 lượt xem
2 bình luận
13:28 29-04-2017
Chào mọi người! Mọi người cho em hỏi em có dùng hàm paint trong đồ họa Graphics java. nhưng nếu em để hàm paint trong 1 class JFrame thì khi thay đổi kích thước JFrame form thì hàm paint sẽ tự chạy lại nhiều lần. Vậy có cách nào để đưa hàm paint vào 1 java class bình thường và quản lý dc hàm paint ví dụ như truyền tham số vào hàm và gọi hàm khi cần không ạ?
import java.awt.Graphics;
public class Form2 extends javax.swing.JFrame
{
public Form2()
{
initComponents();
}
public void paint(Graphics g)
{
super.paint(g);
g.drawOval(10, 20, 20, 15);
}
}
Đây là code của em. em cảm ơn mọi người ạ!
Trong Java bạn không nên vẽ trực tiếp lên Frame. Bạn có thể tạo 1 Panel và vẽ gì lên đó tùy thích và add nó vào Frame.
Còn nếu bạn muốn tạo 1 class bình thường để vẽ thì chỉ cần tạo cho nó 1 thằng Graphics hoặc Graphics2D rồi dùng như thường thôi. (Cái này bạn phải lấy thằng Graphics của thằng Panel truyền vào nhé cho class bạn tạo nhé).
Mọi component trong Java đều override lại hàm tên là "paint" mục đích là để vẽ ra thành phần đó trên giao diện. Việc thay đổi kích thước của Frame hoặc Panel thì 2 container này đều gọi lại hàm paint để vẽ lại nó. Đây là cơ chế hoạt động của mấy thằng này. Ở trên bạn viết hàm paint kiểu đó có nghĩa là nó sẽ override lại hàm paint của lớp JFrame nên khi thay đổi kích thước của frame hàm này sẽ được gọi lại. Giải pháp là đổi tên hàm khác đi (bỏ cái super.paint() đi) hoặc đem cái g.drawOval ra 1 hàm khác rồi đặt điều kiện khi gọi nó.