Saat kita membuat program GUI dengan Swing, jendelanya sering tampil pada pojok kiri atas atau pada titik (
0
,0
).
Bagaimana caranya agar jendela selalu tampil di tengah-tengah layar?
Apakah kita harus mengatur manual posisi titiknya?
Ya perlu, untuk lebih jelasnya mari kita bahas…
Class-class yang dibutuhkan
Ada dua class yang kita butuhkan untuk membuat jendela JFrame tampil di tengah-tengah.
Dimension
untuk membuat objek dimensiToolkit
untuk mengambil ukuran layar
Kedua class tersebut berada dalam package
java.awt
.Method untuk Mengatur Posisi Jendela
Method untuk mengatur posisi jendela adalah
setLocation()
dengan argumen lokasi koordinat titik x
dan y
.x
titik horizontal;y
titik vertikal.
Maka untuk membuat jendela tampil di tengah-tengah layar, kita harus menyesuaikan koordinat
x
dan y
berdasarkan tinggi dan lebar layar.// mengambil ukuran layar
Dimension layar = Toolkit.getDefaultToolkit().getScreenSize();
// membuat titik x dan y
int x = layar.width / 2 - jendela.getSize().width / 2;
int y = layar.height / 2 - jendela.getSize().height / 2;
jendela.setLocation(x, y);
Pertama kita membagi tinggi dan lebar jendela dengan
2
. Sehingga titik yang akan kita dapatkan tepat berada di tengah-tengah layar.
Misalkan ukuran layarnya adalah
800x600
, maka titik yang akan didapatkan adalah x=400
dan y=300
.
Akan tetapi jendelanya tidak tampil di tengah layar dengan sempurnya, karena jendela juga memiliki tinggi dan lebar.
Untuk mengatasi ini, hasil bagi dua dari tinggi dan lebar layar kita kurangi dengan tinggi dan lebar jendela yang dibagi dua juga.
int x = layar.width / 2 - jendela.getSize().width / 2;
int y = layar.height / 2 - jendela.getSize().height / 2;
Sekarang jendelanya sudah ditampilkan di tengah-tengah layar.
Kode Lengkap
Sudah paham kan dengan teorinya?
Sekarang mari kita coba terapkan dalam kode.
Silahkan buat JFrame baru, lalu impor class yang dibutuhkan.
import java.awt.Dimension;
import java.awt.Toolkit;
Setelah itu, tambahkan kode berikut pada contstuctor atau di bawah
initComponent()
.// mengambil ukuran layar
Dimension layar = Toolkit.getDefaultToolkit().getScreenSize();
// membuat titik x dan y
int x = layar.width / 2 - this.getSize().width / 2;
int y = layar.height / 2 - this.getSize().height / 2;
this.setLocation(x, y);
kita menggunakan
this
untuk menggantikan jendela, karena jendela yang kita buat adalah class turunan dari JFrame
.
Sehingga kode lengkapnya akan seperti ini:
import java.awt.Dimension;
import java.awt.Toolkit;
public class JendelaPercobaan extends javax.swing.JFrame {
// konstruktor
public JendelaPercobaan() {
initComponents();
// mengambil ukuran layar
Dimension layar = Toolkit.getDefaultToolkit().getScreenSize();
// membuat titik x dan y
int x = layar.width / 2 - this.getSize().width / 2;
int y = layar.height / 2 - this.getSize().height / 2;
this.setLocation(x, y);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate=“collapsed” desc=“Generated Code”>
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("www.petanikode.com");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(138, 138, 138)
.addComponent(jLabel1)
.addContainerGap(143, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(134, 134, 134)
.addComponent(jLabel1)
.addContainerGap(149, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
public static void main(String args[]) {
/* Set the Nimbus look and feel /
//<editor-fold defaultstate=“collapsed” desc=” Look and feel setting code (optional) “>
/ If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if (“Nimbus”.equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(JendelaPercobaan.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(JendelaPercobaan.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(JendelaPercobaan.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(JendelaPercobaan.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/ Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JendelaPercobaan().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
// End of variables declaration
}
Silahkan di-run dan lihatlah hasilnya:
Referensi: Stack Overflow
Komentar
Posting Komentar