Sempadan dan Kedudukan Tetingkap Tidak Boleh Ubah Saiz
Dalam situasi di mana JFrames tidak boleh ubah saiz digunakan dan Windows Aero didayakan, tingkah laku kaedah setLocation mungkin kelihatan tidak konsisten apabila mempertimbangkan sempadan tingkap.
Kepada menggambarkan tingkah laku ini, pertimbangkan coretan kod berikut:
import java.awt.Rectangle; import javax.swing.JFrame; public class FrameBorders { public static void main(String[] args) { JFrame frame1 = new JFrame("frame 1"); JFrame frame2 = new JFrame("frame 2"); frame1.setResizable(false); frame2.setResizable(false); frame1.setVisible(true); Rectangle bounds = frame1.getBounds(); frame2.setLocation(bounds.x + bounds.width, bounds.y); frame2.setVisible(true); } }
Dengan kod ini, anda mungkin menjangkakan frame2 diletakkan di sebelah kanan frame1. Walau bagaimanapun, apabila Windows Aero didayakan, sempadan kedua-dua bingkai bertindih.
Penjelasan dan Penyelesaian
Windows Aero menggunakan penggayaan berbeza pada tetingkap yang tidak boleh diubah saiz, menghasilkan sempadan yang lebih tebal. Oleh kerana kaedah setLocation mempertimbangkan dimensi mentah tetingkap tanpa mengira ketebalan sempadan, ia salah meletakkan tetingkap, membawa kepada isu bertindih.
Untuk mencapai gelagat yang diingini bagi dua bingkai yang tidak boleh diubah saiz diletakkan bersebelahan tanpa bertindih sempadan, anda boleh:
Atas ialah kandungan terperinci Mengapa JFrames Tidak Boleh Saiz Bertindih Apabila Menggunakan Windows Aero?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!