Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Thắc mắc cách vẽ hình trong Java

    Mình có đoạn code sau:
    Mã:
    public class GUITest {
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            
            frame.setSize(400, 400);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            JOptionPane.showMessageDialog(null,"HellWorld!");
            Graphics g = frame.getGraphics()
            g.drawRect(10, 30, 100, 100);
                   
        }
    }
    Mọi người giải thích hộ mình vì sao khi xóa dòng lệnh JOptionPane.showMessageDialog(null,"HellWorld!");
    thì không hiện hình vuông lên nữa! tks

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi kaito_kid_1012
    Mình có đoạn code sau:
    Mã:
    public class GUITest {
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            
            frame.setSize(400, 400);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            JOptionPane.showMessageDialog(null,"HellWorld!");
            Graphics g = frame.getGraphics()
            g.drawRect(10, 30, 100, 100);
                   
        }
    }
    Mọi người giải thích hộ mình vì sao khi xóa dòng lệnh JOptionPane.showMessageDialog(null,"HellWorld!");
    thì không hiện hình vuông lên nữa! tks
    Bạn gọi hàm paint() hoặc repaint() trên đối tượng frame thử xem. Mình không rõ hàm nào là public nữa [IMG]images/smilies/biggrin.png[/IMG]

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trong trường hợp này, sau khi hiện JoptionPanel, JFrame không tự vẽ lại, nên hình vẽ vẫn còn. Nếu có thao tác làm JFrame vẽ lại (thay đổi kích thước frame...) thì hình vừa vẽ sẽ mất.

    Không nên dùng JFrame.getGraphics() vì nó chỉ trả về đối tượng Graphic tạm thời. Nếu muốn vẽ trên thành phần nào đó thì nên mở rộng một lớp con từ nó (extends). Xem: http://stackoverflow.com/a/15991175/1841854

    Câu hỏi của bạn giống như câu đố mà các thầy cô hay đố [IMG]images/smilies/smile.png[/IMG]).
    Vì sao mà chính JOptionPanel lại ngăn JFrame vẽ lại được.

    Trên đây chỉ là phỏng đoán, qua một số đoạn mã (dựa trên câu hỏi của bạn) mình vừa thử xong, không hẳn là chính xác.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi SITUVNX
    Trong trường hợp này, sau khi hiện JoptionPanel, JFrame không tự vẽ lại, nên hình vẽ vẫn còn. Nếu có thao tác làm JFrame vẽ lại (thay đổi kích thước frame...) thì hình vừa vẽ sẽ mất.

    Không nên dùng JFrame.getGraphics() vì nó chỉ trả về đối tượng Graphic tạm thời. Nếu muốn vẽ trên thành phần nào đó thì nên mở rộng một lớp con từ nó (extends). Xem: http://stackoverflow.com/a/15991175/1841854

    Câu hỏi của bạn giống như câu đố mà các thầy cô hay đố [IMG]images/smilies/smile.png[/IMG]).
    Vì sao mà chính JOptionPanel lại ngăng JFrame vẽ lại được.

    Trên đây chỉ là phỏng đoán, qua một số đoạn mã (dựa trên câu hỏi của bạn) mình vừa thử xong, không hẳn là chính xác.
    Tks! nhờ bạn cũng hiểu dc phần nào rồi! sẽ cố gắng tìm hiểu thêm! [IMG]images/smilies/biggrin.png[/IMG]
    Như bạn nói thì JFrame trong khi chạy luôn tự vẽ lại và khi có JOptionpane thì thằng này ngăn sự tự vẽ lại của JFrame ak?

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Khi không có JoptionPanel thì nó không hiện hình đã vẽ => JFrame đã vẽ lại.
    Nhưng khi có JOptionPanel thì vẫn hiện hình, giống như có gì đã chặn quá trình vẽ lại của JFrame. Mò thôi.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •