Có lần mình code một application dùng Java Swing, vì nhu cầu đặc biệt cho một dialog nên mình đã sử dụng JFrame để làm dialog. Tuy nhiên, một application có nhiều JFrame là điều không tốt chút nào, điều này các bạn có thể tìm hiểu thêm từ nhiều nguồn (từ khóa: multiple Jframes in one application).
Vậy mục đích mình viết bài này là để làm gì?
Lần đó, mình tạo thêm 1 JFrame cho application của mình, và trong lúc code, có nhiều lúc mình show cái JFrame đó lên, tự nhiên nó chỉ hiện có cái title bar với 3 cái nút -+x lên, Kiểu như trong hình dưới nè:
Khổ cái là không phải lúc nào nó cũng hiện như vậy, mà đa số là hiện lên ngon lành, lâu lâu lại làm một quả như vậy mới khốn nạn. Ngồi debug đủ kiểu vẫn ko hiểu tại sao lại ra như vậy... Sau một lúc hì hục mình search google, mà cũng chẳng biết mô tả thế nào cho google nó hiểu nữa. Cuối cùng mình thử từ khóa "JFrame only show title bar", quả nhiên là ảo diệu vô cùng, từ khóa này dẫn mình đến 1 thread trong stackoverflow (http://stackoverflow.com/questions/13873989/java-jframe-not-displayed-just-titlebar).
Từ thread này thì mình biết được rằng hàm pack() của JFrame sẽ tự động resize frame cho vừa khít các component của nó. Và trong phần code của mình có một lỗ hổng đó là các component được chuẩn bị trong một thread và hàm pack() lại được gọi ở ngoài. Đây là một lỗi ngớ ngẩn tuy nhiên cũng khá phiền hà nếu chúng ta chưa biết chức năng của hàm pack().
0 nhận xét:
Đăng nhận xét