Sumber artikel: Penggemar Komputer Penulis: Zhang Jian
Entah berapa banyak pasir dan batu yang digunakan untuk membangun Menara Babel? Siapa yang tahu berapa hari dan malam yang dibutuhkan untuk membangun Roma? Satu-satunya hal yang kita tahu adalah bahwa tanpa batu bata dan batu, tidak akan ada Tembok Besar yang berkelok-kelok ribuan mil; tanpa tumpukan batu besar dan tanah liat, tidak akan ada piramida abadi. Terlihat bahwa persiapan pengetahuan dasar sangat penting bagi kita untuk mempelajari apapun. Jadi, mari kita mulai dengan memahami beberapa fungsi dasar Swing dan memulai proyek besar kita membangun Roma!
Kata pengantar
Java Cafe sudah buka sejak lama. Jika Anda sudah menyukai cita rasa kopi Jawa, ingatlah untuk sering-sering datang. Kali ini, kami telah menyiapkan secangkir besar kopi harum untuk semua orang - berdasarkan pengembangan permainan "Lianliankan", kami akan belajar cara menggunakan Swing di Java bersama Anda. Saat Anda mencicipi secangkir kopi ini dengan hati-hati, Anda akan melakukannya menemukan bahwa Java tidak hanya memiliki cita rasa unik pada secangkir kopi saya, tetapi saya juga belajar cara mengembangkan game profesional. Ini benar-benar yang terbaik dari kedua dunia!
Untuk memberi gambaran sekilas, gambar di bawah ini adalah screenshot dari game tersebut. Anda dapat mengunduh game untuk dicoba (unduh program game; unduh file sumber), lalu gunakan java -jar kyodai.jar untuk menjalankannya dalam mode baris perintah. Selain itu, Anda juga dapat mengunjungi beranda saya http://www.ismyway.com untuk mengunduh versi stand-alone dan versi mobile dari game ini untuk uji coba (lihat Gambar 1).
Java Cafe sudah mengenalkan ilmu AWT sebelumnya, lalu apa perbedaan Swing dan AWT? Siapa pun yang mempelajari Java mungkin pernah mendengar atau melihat istilah kontrol kelas berat dan kontrol ringan. AWT biasa kita sebut sebagai kontrol kelas berat, dan Swing adalah kontrol ringan. Kita semua tahu bahwa slogan Java adalah "tulis sekali, jalankan di mana saja", yang juga mengharuskan kita menggunakan kode Java murni sebanyak mungkin dalam program kita. Sayangnya, AWT mengandalkan antarmuka ke platform asli, sehingga antarmuka yang dibuat dengan AWT mungkin terlihat sedikit berbeda pada sistem operasi yang berbeda. Swing benar-benar berbeda. Swing ditulis dalam Java murni. Oleh karena itu, antarmuka yang ditulis dalam Swing dapat memastikan tampilan yang sama di semua platform. Berikut trik lainnya: Di JDK, untuk memudahkan diferensiasi, semua kontrol Swing dimulai dengan huruf kapital J, seperti JButton (padanan yang sesuai dalam AWT adalah Button), sehingga Anda dapat dengan mudah membedakan kontrol Swing dari kontrol AWT.
Ayunkan pengalaman pertama
Bagi yang ingin belajar pemrograman Swing, kami telah menyiapkan beberapa tips khusus untuk Anda. Pertama, sangat penting untuk mengunduh dan membaca kodenya. Karena ini adalah tutorial tentang Swing, kami hanya mencoba menjelaskan sebanyak mungkin konten terkait Swing. Konten yang tidak terkait dengan Swing umumnya tidak akan dibahas, seperti bagian algoritma. Kedua, karena keterbatasan ruang, tidak mungkin untuk menulis setiap bagian kode secara lengkap di sini, jadi Anda juga perlu membandingkannya dengan kode lengkapnya. Terakhir, untuk memudahkan semua orang fokus mempelajari Swing, kami juga telah memasukkan sumber daya yang diperlukan untuk pengembangan game ke dalam file unduhan, Anda dapat mengkompilasi dan menjalankannya serta melihat hasil eksekusinya.
1. Wadah tingkat atas
Apa yang dimaksud dengan kontainer tingkat atas? Saat kita menggunakan Java untuk pemrograman grafik, di mana diagramnya digambar? Kita membutuhkan sebuah wadah yang dapat memberikan gambar grafik. Wadah ini disebut wadah tingkat atas. Anda juga dapat menganggapnya sebagai jendela. Wadah tingkat atas adalah dasar untuk pemrograman grafis. Semua hal grafis harus dimasukkan dalam wadah tingkat atas. Di Swing, kami memiliki tiga container tingkat atas yang dapat digunakan, yaitu:
・JFrame: Digunakan untuk mendesain aplikasi yang mirip dengan bentuk jendela di sistem Windows.
・JDialog: Mirip dengan JFrame, hanya saja JDialog digunakan untuk mendesain kotak dialog.
・JApplet: Digunakan untuk mendesain applet Java yang dapat disematkan di halaman web.
Jika kita perlu menggunakan Swing untuk membuat program kelas jendela, kode kita akan terlihat seperti ini:
import javax.swing.*;
KyodaiUI kelas publik
memperluas JFrame {
…
}
2.Kontrol
Kontrol adalah elemen dasar yang membentuk antarmuka aplikasi. Tombol, kotak teks, bilah kemajuan, dll., semuanya merupakan kontrol. Kontrol (di sini kita hanya membahas kontrol visual) dapat dibagi menjadi kontrol kontainer dan kontrol non-kontainer. Secara harfiah, kontrol kontainer adalah kontrol khusus yang dapat berisi kontrol lain. Misalnya, kontrol JPanel di Java adalah kontrol kontainer. Kita bahkan dapat menempatkan kontrol non-kontainer seperti tombol dan kotak teks di JPanel -Kontrol wadah seperti tombol dan kotak teks di JPanel. Tempatkan beberapa kontrol JPanel di dalamnya (perlu dicatat bahwa wadah tingkat atas juga merupakan kontrol tipe wadah. Setiap aplikasi jendela memiliki dan hanya dapat memiliki satu wadah tingkat atas. kontrol. Dengan kata lain, wadah tingkat atas tidak dapat disertakan dalam kontrol lain) .
Ada banyak kontrol container di Java. Selain JPanel yang disebutkan di atas, ada juga JTabbedPane, JScrollPane, dll. Kontrol non-container termasuk JButton, JLabel, JTextField, dll. Jika Anda perlu menambahkan kontrol ke kontrol tipe kontainer, Anda dapat menggunakan metode add(Component comp) untuk mencapai hal ini, seperti:
Panel JPanel = JPanel baru();
Tombol JButton = JButton baru();
panel.tambahkan(tombol);
3. Tata Letak
Apa itu tata letak? Tata letak adalah sistem manajemen antarmuka yang digunakan di Java untuk mengontrol pengaturan dan posisi kontrol. Orang yang telah menggunakan bahasa pengembangan pemrograman visual lainnya akan selalu merasa bahwa desain antarmuka Java aneh saat pertama kali menggunakannya: tidak ada metode WYSIWYG untuk mengatur koordinat kontrol! Namun ternyata sistem manajemen layout yang disediakan oleh Java sendiri juga dapat memenuhi kebutuhan kita dengan baik, dan memiliki keunggulan lebih dalam kinerja lintas platform.
Tata letak yang umum digunakan adalah:
・BorderLayout: Sistem manajemen yang membagi antarmuka menjadi area atas, bawah, kiri, kanan, dan tengah. Pada tata letak BorderLayout, Anda hanya dapat menempatkan maksimal 5 kontrol. Jika ada lebih dari 5 kontrol, disarankan untuk menggunakan sistem tata letak lainnya.
・GridLayout: GridLayout adalah sistem manajemen tata letak yang memotong antarmuka pengguna menjadi tata letak seperti papan catur. Jika kita ingin merancang perangkat lunak kalkulator yang serupa dengan yang disertakan dengan Windows, GridLayout tidak diragukan lagi merupakan pilihan terbaik.
・FlowLayout: FlowLayout berbeda dari dua jenis sistem manajemen tata letak di atas. Di FlowLayout, Anda tidak perlu menentukan di mana menempatkan setiap kontrol. Anda hanya perlu menambahkan kontrol ke FlowLayout, dan FlowLayout akan menempatkannya secara berurutan urutan penambahan kontrol. Kontrol akan dibungkus secara otomatis jika tidak ada cukup ruang.
Setelah memiliki pemahaman dasar tentang sistem manajemen tata letak ini, mari kita masuk ke dalam desain antarmuka bersama. Setelah mengamati dengan cermat pengaturan "Lianliankan" pada game QQ, kita dapat menemukan bahwa keseluruhan antarmuka dibagi menjadi tiga area, bagian atas adalah area menu sistem, area terluas adalah area permainan pengguna, dan terdapat juga area interaksi pengguna Area. Area, setiap area terdiri dari beberapa kontrol.
Dengan banyaknya kontrol, dari mana kita mulai? Karena kontrol lain dapat ditempatkan di kontrol kontainer, kita hanya perlu menentukan kontrol kontainer yang akan ditempatkan terlebih dahulu. Sekarang kita tahu jumlah kontrol kontainer yang perlu kita gunakan, mari masuk ke pemilihan sistem manajemen tata letak. Gunakan GridLayout? Tampaknya agak dipaksakan, menggunakan FlowLayout? Apakah ada pilihan yang lebih baik? Ngomong-ngomong, saya rasa Anda pasti pernah memikirkan BorderLayout, seperti yang ditunjukkan pada Gambar 2 di bawah.
Sebelum memulai, setiap orang harus memperhatikan fakta bahwa desain antarmuka harus mempertimbangkan ukurannya terlebih dahulu, apakah itu ukuran antarmuka program utama atau ukuran setiap area. Jika ukuran yang sesuai tidak dirancang, itu akan menjadi sangat menyakitkan untuk mengubahnya di masa depan.
Berikut ini adalah program sumber yang sesuai:
import java.awt.*;
import javax.swing.*;
kelas publik KyodaiUI memperluas JFrame {
publik KyodaUI() {
this.setSize(780, 500); //Atur ukuran formulir menjadi 780*500
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false); //Formulir tidak dapat diubah ukurannya
this.setTitle("Lianliankan"); //Tetapkan judul
JPanel toolBar = JPanel baru();
toolBar.setBackground(Warna.putih);
toolBar.setPreferredSize(Dimensi baru(780, 48));
JPanel actionPanel = new JPanel(); //Buat kontrol tipe JPanel baru
actionPanel.setBackground(Color.kuning); //Mengatur warna latar belakang
actionPanel.setPreferredSize(Dimensi baru(160, 380)); //Setel ukurannya
JPanel contentPanel = JPanel baru();
contentPanel.setBackground(Warna.biru);
contentPanel.setPreferredSize(Dimensi baru(620, 380));
this.getContentPane().add(toolBar, BorderLayout.NORTH);
this.getContentPane().add(actionPanel, BorderLayout.EAST);
this.getContentPane().add(contentPanel, BorderLayout.CENTER);
}
public static void main(String[] args) melempar HeadlessException {
KyodaiUI kyodaiUI = KyodaiUI baru();
kyodaiUI.show();
}
}
Mari kita lihat cara kerja program di atas. Pertama-tama, extends JFrame menunjukkan bahwa ia diwarisi dari JFrame, yang merupakan kontrol kontainer tingkat atas paling dasar. Faktanya, di JDK, kontrol yang dimulai dengan huruf J adalah kontrol Swing. Kemudian atur properti container. Diantaranya, setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) digunakan untuk memberitahu mesin virtual Java untuk menutup proses jendela ketika pengguna mengklik tombol "Tutup" di sudut kanan atas formulir. Jika Anda tidak melakukan ini, Anda akan menemukan bahwa meskipun Anda dapat mengklik untuk menutup jendela, program tidak akan keluar. Dalam kode berikut, kami menambahkan tiga kontainer Panel ke kontainer tingkat atas. Perlu dicatat bahwa di AWT, kita bisa langsung menulisnya sebagai add(toolBar, BorderLayout.NORTH), tetapi di Swing, harus ditulis sebagai getContentPane().add(toolBar, BorderLayout.NORTH), jika tidak, program akan berjalan salah.
Sekarang Anda dapat mengkompilasi dan menjalankannya untuk melihat apakah sama dengan hasil menjalankan saya (lihat Gambar 3)?
4. Perbatasan
Meskipun kita menggunakan warna latar depan yang berbeda untuk membedakan area yang berbeda, tidak ada kesan hierarki. Ini akan jauh lebih indah dengan batas.
Di Java, semua kontrol Swing yang dimulai dengan J dapat menggunakan metode setBorder untuk menetapkan batasnya sendiri. Ada banyak macam border, linier, terangkat, cekung, dan kosong. Anda bahkan bisa memadukannya secara bebas untuk membentuk gaya Anda sendiri. Semua Borders harus dibuat menggunakan metode statis yang disediakan di javax.swing.BorderFactory, seperti:
Perbatasan perbatasan = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
warna baru(45, 92, 162),
warna baru(43, 66, 97),
warna baru(45, 92, 162),
Warna baru (84, 123, 200));
Sekarang kita ubah toolBar.setBackground(Color.white) menjadi toolBar.setBorder(border).
Pertarungan praktis - tulis nama Anda sendiri
Sekarang kami memiliki antarmuka yang berfungsi. Meskipun tidak dapat berbuat apa-apa, jangan panik.
Sekarang mari kita sediakan menu "Tentang" di area menu untuk menampilkan informasi program. Tidakkah Anda ingin orang lain mengetahui nama Anda? Swing sendiri menyediakan tombol kontrol JButton yang sudah jadi. Kita hanya perlu membuat tombol baru: JButton about = new JButton("about"); Bagaimana seharusnya tombol ini ditempatkan di area menu dan bukan di tempat lain? Kita bisa menambahkan kode berikut: toolBar.add(about); Hei, kenapa tidak ada respon saat mengklik tombol? Ini karena Anda belum memberi tahu program apa yang harus dilakukan ketika Anda mengklik tombol tersebut. Untuk menambahkan respon event ke sebuah tombol, pertama-tama Anda perlu menggunakan about.addActionListener(this) untuk memberitahu program agar mendengarkan event ketika tombol ditekan. Karena ActionListener adalah antarmuka program, kita juga harus melakukan sedikit hal deklarasi kelas. Modifikasi: public class KyodaiUI extends JFrame mengimplementasikan ActionListener {...} Tujuan penerapan antarmuka ActionListener adalah untuk memberi tahu program yang ingin saya tangani peristiwa. Tentu saja akhirnya kita harus menambahkan kode untuk merespon event tersebut:
public void actionPerformed(ActionEvent e) {
if (e.getSource() == tentang) {
JOptionPane.showMessageDialog(ini, "Nama saya", "Tentang",
JOptionPane.INFORMATION_MESSAGE);
kembali ;
}
}
Diantaranya, e.getSource() mewakili kontrol yang saat ini memicu kejadian. Karena seringkali ada lebih dari satu kontrol dalam program kita, kontrol ini dapat menghasilkan kejadian, jadi kita harus menggunakan metode ini untuk menemukan kontrol yang menghasilkan kejadian tersebut.
ringkasan
Mari kita tinjau apa yang kita pelajari hari ini: Pertama, kita memahami kontainer tingkat atas, dan kita juga tahu bahwa kontrol dibagi menjadi kontrol kontainer dan kontrol non-kontainer. Kita juga tahu cara menggunakan batas sedikit.
Tentu saja Anda belajar dan berlatih sambil jalan, jadi izinkan saya memberi Anda beberapa pekerjaan rumah kecil untuk membantu Anda mengkonsolidasikan apa yang telah Anda pelajari hari ini: tombol yang kami tambahkan di atas ada di tengah bilah menu dan tidak indah. Silakan letakkan di Coba di kiri atau kanan.
Terakhir, saya ingin memberi Anda beberapa bahan referensi yang lebih baik:
●Membuat GUI dengan JFC/Swing
http://java.sun.com/docs/books/tutorial/uiswing/index.html
●Grafik 2D
http://java.sun.com/docs/books/tutorial/2d/index.html
●API JDK
http://java.sun.com/j2se/1.4.2/docs/api/index.html