Java, JFrame: getWidth() mengembalikan 0

setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
setResizable(false);
setUndecorated(true);
System.out.println("--------> "+getContentPane().getWidth()); //----> 0 why is this happening?

Saya mencoba menentukan ukuran JFrame. Saya telah mencari di Google dan memeriksa dokumentasinya dan saya masih tidak tahu mengapa itu tidak berhasil. Ini berfungsi dengan baik pada kontrol lain yang saya coba.

EDIT: frame.getWidth() masih berfungsi ketika dipanggil di luar kelas (yang memperluas JFrame), jika saya mengganti

System.out.println("--------> "+getContentPane().getWidth());

dengan

System.out.println("--------> "+this.getWidth());

getWidth masih akan mengembalikan 0

EDIT2: Saya memerlukan ukuran bingkai sebelum mengaturnya agar terlihat dan sebagainya. Saya perlu menambahkan kontrol lain ke bingkai dan koordinat serta ukurannya bergantung pada ukuran bingkai.


person adrianton3    schedule 09.08.2011    source sumber
comment
semuanya tergantung bagaimana Anda meletakkan wadahnya, jika ada definisi untuk setSize() atau setBounds(), maka semua Dimension hanya mengembalikan Container yang terlihat, sebaliknya jika JComponents mengembalikan PreferedSize ke Container, maka Anda bisa mendapatkan Dimension ini di mana pun Anda mau   -  person mKorbel    schedule 09.08.2011
comment
@ madflame991, Untuk pengeditan kedua Anda, ini tidak mungkin, juga tidak masuk akal.   -  person mre    schedule 09.08.2011


Jawaban (2)


Alasan mengapa Anda mendapat 0 adalah karena Anda tidak memanggil paket(), setSize(int, int) atau setSize(Dimensi). Ini hanya ketika memanggil salah satu metode ini maka tata letak frame Anda akan dihitung.

JFrame frame = new JFrame("My Frame");
frame.setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
frame.setResizable(false);
frame.setUndecorated(true);
frame.pack(); // Important line!!! 
frame.setVisible(true);
System.out.println("--------> "+getContentPane().getWidth());
person aymeric    schedule 09.08.2011
comment
Saya memerlukan lebarnya sebelum saya selesai menambahkan kontrol - person adrianton3; 09.08.2011
comment
Saya menjalankan tes dan sepertinya Anda tidak bisa mendapatkan lebar bingkai karena tidak terlihat tetapi saya menyadari bahwa jika bingkai Anda selalu JFrame.MAXIMIZED_BOTH, maka lebar bingkai sama dengan lebar layar, yang bisa Anda dapatkan dengan Toolkit tk = Toolkit.getDefaultToolkit();int screenWidth = tk.getScreenSize().width; - person aymeric; 09.08.2011
comment
Terima kasih! getScreenSize bukan yang saya cari tetapi ini cukup menyelesaikan masalah saya - person adrianton3; 09.08.2011

Anda belum menyadari (yaitu setVisible(true)) JFrame. Oleh karena itu, ia tidak memiliki ukuran karena komponen-komponennya belum ditata.

person mre    schedule 09.08.2011
comment
1+. pack() juga akan merender JFrame (saya yakin). - person Hovercraft Full Of Eels; 09.08.2011
comment
Saya mencoba memanggilnya setelah membuatnya terlihat dan masih menghasilkan 0 - person adrianton3; 09.08.2011
comment
@ madflame991, Ini mungkin pertanyaan bodoh, tapi apakah Anda menambahkan komponen apa pun ke JFrame sebelum membuatnya terlihat? Dan seperti yang disebutkan @Hovercraft, mungkin memanggil pack() adalah pilihan yang lebih baik, karena ini akan memaksa container untuk menata letak komponennya dan kemudian membuatnya terlihat. - person mre; 09.08.2011
comment
inc. @Hovercraft Saran Penuh Belut +1 - person mKorbel; 09.08.2011
comment
pack() adalah pilihan yang lebih baik, Setuju. ..karena ini akan memaksa container untuk mengatur tata letak komponennya Setuju dan kemudian membuat dirinya terlihat. Tidak. pack() biasanya dipanggil sebelum setVisible(true), tetapi tidak mempengaruhi visibilitasnya sendiri. - person Andrew Thompson; 10.08.2011
comment
@Andrew, Anda sepenuhnya benar. Saya lupa menghapus komentar saya! :D - person mre; 10.08.2011