Rumah >Java >javaTutorial >Mengapa JFrames Tidak Boleh Saiz Bertindih Apabila Menggunakan Windows Aero?

Mengapa JFrames Tidak Boleh Saiz Bertindih Apabila Menggunakan Windows Aero?

Linda Hamilton
Linda Hamiltonasal
2024-12-06 05:42:14863semak imbas

Why Do Non-Resizable JFrames Overlap When Using Windows Aero?

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:

  • Gunakan JDialogs Sebaliknya: JDialogs biasanya memaparkan jidar yang lebih nipis daripada JFrames. Dalam kod contoh, menggantikan frame2 dengan JDialog menyelesaikan isu sempadan bertindih.
  • Lumpuhkan Aero: Jika menggunakan JDialogs tidak boleh dilaksanakan, anda boleh melumpuhkan kesan Aero dengan menetapkan sifat sistem "sun .java2d.noddraw" kepada "true". Ini boleh meningkatkan ketepatan kedudukan sempadan.
  • Laraskan Sempadan Secara Manual: Tentukan ketebalan sempadan yang sesuai berdasarkan platform anda dan laraskan sempadan tetingkap secara manual untuk mengimbanginya. Ini memerlukan pengukuran dan ujian yang teliti untuk memastikan penentududukan yang betul pada sistem yang berbeza.
  • Pertimbangkan Tetingkap Asli: Rangka kerja tetingkap asli, seperti AWT atau Swing, mungkin memberikan kawalan yang lebih tepat ke atas sempadan tetingkap dan kedudukan daripada API standard Java.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn